Массивы структур. Указатели на структуры

Определение нового имени типа

 

При решении прикладных задач на компьютере часто возникает необходимость в типах данных, которые не определены в языке программирования. В языке С++ можно создавать новые имена типов данных – пользовательские типы данных. Эта возможность реализуется при помощи спецификатора typedef или директивы задания макроопределений #define. Ключевое слово typedef позволяет заменить имя заранее созданного пользовательского или стандартного типа данных на имя, которое задает программист. Это очень удобно при работе со структурами. Пример определения нового (пользовательского) имени структурного типа данных приведен в табл.10.

 

 

Таблица 10
Определение tovar с помощью typedef Определение tovar с помощью #define
typedef struct { char name[50];// Наименование float price ; // Цена оптовая float percent; // Наценка в % int vol; // 06ъем партии char date[9] ; // Дата поставки партии } tovar; tovar tv; #define tovar struct tvr tovar { char name[50]; // Наименование float price ; // Цена оптовая float percent; // Наценка в % int vol; // 06ъем партии char date[9] ; // Дата поставки //партии }; tovar tv;

В обоих примерах именем нового типа пользователя будет tovar, а tv – это структура-переменная типа tovar. Надо заметить, что такие определения записываются в разделе программы: директивы препроцессора, т.е. перед заголовком главной функции main().

Примечание. В языке С++ кроме структур существует такое понятие, как объединение. Объединение от структуры отличается тем, что объем оперативной памяти, занимаемой объединением, будет равен объему, который необходим для размещения максимального по объёму памяти элемента этого объединения.

 

 

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

Указатели на структуры определяются, как и указатели на переменные других типов. Если объявлен указатель на структурный тип, то в этом случае говорят о динамическом массиве структур. Динамическим массивам структур ОП выделяется в процессе выполнения программы с помощью одной из соответствующих библиотечных функций, например malloc().

Допустим, что определён новый тип пользователя stud (студент) – структура с полями fio, kurs, facultet, spec.

typedef struct

{

char fio[30]; // ФИО студента

int kurs ; // курс

char facultet[50]; // наименование факультета

char spec[50] ; // специальность

} stud;

Тогда, чтобы решать задачи об обработке списков студентов, необходимо создать массив структур (статический или динамический) типа stud и обработать его согласно поставленной задаче.