Структуры создаются с использованием динамических методов распределения памяти. Как мы уже упоминали, команда 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 stdio.h /*стандартные входные/выходные функции*/
#include stdlib.h /*библиотека и распределение памяти */
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); /*номер */