Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР14-С++-24-мая-2012.doc
Скачиваний:
34
Добавлен:
23.09.2019
Размер:
2.26 Mб
Скачать

1.3. Описатель типа

Можно задавать имя типа структуры с помощью описателя типа typedef.

Этот описатель позволяет создать свое собственное имя типа.

Формат описателя типа:

typedef спецификатор_типа описатели;

Спецификатор типа — это основной или производный тип данных или тип, который ранее определен программистом. Описатель — это новое имя созданного нами типа.

Пример 14.55

Описание нового типа данных «дата», состоящего их трех полей.

typedef struct

{

int day;

char month[10];

int year;

}data; datadl,d2,d3;

1.4. Объявление переменных структурного типа

Чтобы использовать структуру необходимо объявить переменные структурного типа.

Переменные структурного типа можно объявлять так же, как и переменные стандартных типов. Объявлять переменные структурного типа можно двумя способами:

– в виде переменных неименованного структурного типа;

– в виде переменных именованного структурного типа.

Определение переменной именованного структурного типа имеет вид:

struct <имя шаблона структурного типа> < список структур>;

или

<имя шаблона структурного типа> < список структур>;

где < список структур> – список, выбранных программистом, имен структур.

Ключевое слово struct можно опускать в таком описании.

Замечание: Ключевое слово struct является обязательным при программировании на С, так что некоторые программисты могут включать его по привычке. Однако в C++ использовать ключевое слово struct необязательно.

Пример 14.2

Для структуры хранения данных о CD

struct cd_info

{ char titlel[25]; // название CD

char artist[20]; // исполнитель

int num_songs; // число песен

float price; // стоимость CD

char date_bought[8]; // дата покупки

};

чтобы объявить переменные типа cd_info, можно записать

cd_info cd1, cd2, cd3; /*определение переменных cd1, cd2, cd3 */

Пример 14.3

Для структуры хранения данных о студенте

struct student

{

char fio[30]; //Фамилия

int kurs; //Курс

char group[7]; //Группа

};

чтобы объявить переменные типа student, можно записать

struct student S3; /*определение переменной S3 */

student S, S1, S2; /*определение переменных S,S1, S2 */

student stud1, stud2; //. Здесь объявлены две переменные stud1 и stud2.

Определение переменной неименованного структурного типа имеет вид:

struct { <определения элементов>} < список структур>;

Пример 14.4

Для структуры хранения данных о дате

struct data

{ int day;

int mounth;

int year;

} d1, d2;

определены две структуры d1 и d2 неименованного структурного типа data, состоящего из трех элементов целого типа.

Пример 14.5

Для структуры хранения данных о студенте

struct student

{

    char name[50];

    int kurs;

int age;

} s1, s2;

определены две переменные s1 и s2, являющиеся переменными типа struct student. 

Таким образом, структуры неименованного структурного типа определяются одновременно с описанием самого типа. Такой вариант используется для однократного определения структур.

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

Все переменные, использующие один шаблон (тип) структуры, имеют одинаковый набор полей, однако различные наборы значений, присвоенные этим полям.

Компилятор выделяет под структурную переменную число байтов, не всегда равное сумме длин отдельных полей из-за влияния дополнительного фактора внутреннего представления структурных переменных, называемого выравниванием.

Точный размер памяти в байтах, выделенный для структуры можно получить с помощью стандартной функции sizeof:

sizeof(struct<имя_шаблона>);

Например, sizeof (struct student); возвращает 56 байт.

Если же был описан только структурный тип, а ни одной переменной данного типа определено не было, то место в памяти не выделяется.

Пример 14.6

Объявлена структура с именем list, состоящая из трех полей, и переменная с именем L типа struct list

struct list

{

char name[20];

char first_name[40];

int;

}L;

Для переменной L выделяется 64 байта памяти.