Чтение онлайн

на главную - закладки

Жанры

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Рис. 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
 — предоставляет методику динамического распределения памяти, определяя соответствующий объем памяти для структуры данных. Например, чтобы создать новую запись для автомобиля, можно использовать следующий код:

с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); /*номер */

 printf("\nMileage: %6. Из ", new_car_entry->mileage); /*показания одометра*/

}

Когда эта программа будет откомпилирована и выполнена, на экране вашего ПК появится следующее сообщение:

year: 1981

make: Chevy

model: Camaro

VIN: 12Z367

Mileage: 37456

Пока, наверное, использование динамического распределения памяти не кажется вам очень мощным инструментом. В следующем разделе вы сможете оценить силу динамического распределения памяти, когда мы скомпонуем записи и создадим список, что позволит нам осуществлять изменения в процессе выполнения программы. То есть мы сможем добавлять новые элементы в список, переносить элементы из одного списка в другой, удалять элементы из списка, и т.д. Но не будем здесь углубляться в лес деталей, чтобы сразу в нем не заблудиться. Лучше сосредоточим свое внимание на дороге через этот лес. Не будем забывать, что мы изучаем здесь основные структуры данных, чтобы узнать, как они могут использоваться в построении и реализации операционной системы в режиме реального времени.

Поделиться:
Популярные книги

Законы Рода. Том 10

Андрей Мельник
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Соль этого лета

Рам Янка
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Соль этого лета

Доверься мне

Кажанова Юлия
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Доверься мне

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Идеальный мир для Лекаря 29

Сапфир Олег
29. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 29

В погоне за женой, или Как укротить попаданку

Орлова Алёна
Фантастика:
фэнтези
6.62
рейтинг книги
В погоне за женой, или Как укротить попаданку

Плохой парень, Купидон и я

Уильямс Хасти
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Плохой парень, Купидон и я

Достигая Вершин

ZerKo
1. Достигая Вершин
Фантастика:
фэнтези
5.00
рейтинг книги
Достигая Вершин

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Лейтенант космического флота

Борчанинов Геннадий
1. Звезды на погонах
Фантастика:
боевая фантастика
космическая фантастика
космоопера
рпг
фэнтези
фантастика: прочее
5.00
рейтинг книги
Лейтенант космического флота

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Часовое имя

Щерба Наталья Васильевна
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Часовое имя

Командир Красной Армии

Поселягин Владимир Геннадьевич
1. Командир Красной Армии
Фантастика:
попаданцы
8.72
рейтинг книги
Командир Красной Армии