Рис. 8.4. Запись для автомобиля. Запись содержит поля данных, совокупность которых описывает автомобиль
Каждый из типов данных в записи называется полем. Мы объявляем запись или структуру, используя следующий синтаксис:
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 обеспечивает компилятор an alternate???*/
typedef struct car ELEMENT; /*для типа переменной */
typedef ELEMENT *car_temp_ptr; /*определяет указатель на автомобиль*/
Как можно видеть, все поля записи описывают различные параметры данного автомобиля. Мы привели сокращенный список параметров. Структура может содержать столько полей, сколько необходимо. Мы выбрали для каждого поля тот тип данных, который наиболее подходит для описания каждого параметра автомобиля.
Структуры создаются с использованием динамических методов распределения памяти. Как мы уже упоминали, команда
malloc
— предоставляет методику динамического распределения памяти, определяя соответствующий объем памяти для структуры данных. Например, чтобы создать новую запись для автомобиля, можно использовать следующий код:
В главе 3, мы описали, как обращаться к различным полям внутри записи. В этом примере, мы инициализируем недавно созданную автомобильную запись с информацией о конкретном автомобиле. Обратите внимание, что мы использовали оператор
–>
, чтобы обратиться к специфическому полю внутри структуры.
/* инициализация новых полей для структуры car */
new_car_entry–>year = 1981; /* год производства */
printf("\nMileage: %6. Из ", new_car_entry->mileage); /*показания одометра*/
}
Когда эта программа будет откомпилирована и выполнена, на экране вашего ПК появится следующее сообщение:
year: 1981
make: Chevy
model: Camaro
VIN: 12Z367
Mileage: 37456
Пока, наверное, использование динамического распределения памяти не кажется вам очень мощным инструментом. В следующем разделе вы сможете оценить силу динамического распределения памяти, когда мы скомпонуем записи и создадим список, что позволит нам осуществлять изменения в процессе выполнения программы. То есть мы сможем добавлять новые элементы в список, переносить элементы из одного списка в другой, удалять элементы из списка, и т.д. Но не будем здесь углубляться в лес деталей, чтобы сразу в нем не заблудиться. Лучше сосредоточим свое внимание на дороге через этот лес. Не будем забывать, что мы изучаем здесь основные структуры данных, чтобы узнать, как они могут использоваться в построении и реализации операционной системы в режиме реального времени.