Структуры создаются с использованием динамических методов распределения памяти. Как мы уже упоминали, команда malloc()
— предоставляет методику динамического распределения памяти, определяя соответствующий объем памяти для структуры данных. Например, чтобы создать новую запись для автомобиля, можно использовать следующий код:
сar_temp_ptr new_car_entry;
new_car_entry = (car_temp_ptr)malloc(sizeof(ELEMENT));
В главе 3, мы описали, как обращаться к различным полям внутри записи. В этом примере, мы инициализируем недавно созданную автомобильную запись с информацией о конкретном автомобиле. Обратите внимание, что мы использовали оператор –>
, чтобы обратиться к специфическому полю внутри структуры.
/* инициализация новых полей для структуры car */
new_car_entry–>year = 1981; /* год производства */
strcpy(new_car_entry–>make, "Chevy"); /*BWM, Hummer, Saturn */
strcpy(new_car_entry–>model, "Camaro"); /*купе, обратимый, SUV, пикап */
strcpy(new_car_entry–>VIN, " 12Z3 67"); /* комбинация цифр, букв*/
new_car_entry–>mileage = 37456; /*показания спидометра: от 0 до 500,000+ */
new_car_entry–>next = NULL; /* определяет указатель на автомобиль */
Чтобы распечатать различные поля записи, мы могли бы использовать следующий код:
printf("\nyear: %4d ", new_car_entry–>year); / *year mfg */
printf("\nmake: %s ", new_car_entry–>make); /*car делает */
printf("\nmodel: %s ", new_car_entry–>model); /*model*/
printf("\nVIN: является ", new_car_entry–>VIN); /*VIN */
printf("\nMileage: %6.of ", new_car_entry –> mileage); /*odometer reading*/
Поместим все эти части вместе с примером. Мы убедительно просим вас компилировать и выполнить этот код.
#include
#include
void main(void) {
/*определение структуры */
struct car;
int year; /*год выпуска */
char make[10]; /*BWM, Hummer, Saturn*/
char model[12]; /*купе, обратимый, SUV, пикап */
char VIN[10]; /*комбинация цифр и букв*/
float mileage; /*показания одометра: от 0 до 500 000+ */
struct car *next; /*указатель на следующий автомобиль в списке */
typedef struct car ELEMENT;
typedef ELEMENT *car_temp_ptr;
car_temp_ptr new_car_entry; /*ввод записи для автомобиля*/
new_car_entry = (car_temp_ptr)malloc(sizeof(ELEMENT));
/*инициализация новых полей для автомобиля */
new_car_entry->year = 1981; /*год изготовления*/
strcpy(new_car_entry–>make, "Chevy"); /*BWM, Hummer, Saturn */
strcpy(new_car_entry–>model,"Camaro");
/* купе, обратимый, SUV, пикап */
strcpy(new_car_entry–>VIN, "12Z3 67");
/* комбинация цифр и букв */
new_car_entry–>mileage - 37456;/*показания одометра: 0 to 500,000+*/
new_car_entry–>next - NULL; /*указатель на следующий автомобиль в списке*/
printf("\nyear: %4d", new_car_entry–>year); /*год выпуска */
printf("\nmake: %s", new_car_entry–>make) ; /*производитель */
printf("\nmodel: %s", new_car_entry–>model); /*модель */
printf("\nVIN: %s ", new_car_entry –>VIN); /*номер */