Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб9 программирование.doc
Скачиваний:
2
Добавлен:
19.08.2019
Размер:
110.59 Кб
Скачать

7

Работа со структурами

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

Отличие от массивов - элементы структуры разного типа.

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

Пример: товар на складе

название char name[21];

цена float price;

количество int number;

Все три переменных неразрывно связаны с каким-то товаром.

Описание структуры

1 Способ.

struct {

char name[21];

float price;

int number;

} goods;

Выделяется 27 байт для переменной goods;

2 Способ.

struct _GOODS {

char name[21];

float price;

int number;

};

Оператор не выделяет память, а устанавливает тип структуры. Для выделения памяти надо выдать оператор:

struct _GOODS goods1, goods2;

Выделяет память для goods1 и goods2, каждой по 27 байт.

Можно смешать два способа:

struct _GOODS { char name[21];

float price;

int number;

} goods;

Устанавливает тип структуры и выделяет память для goods.

3 способ. Используется оператор описания типа typedef:

typedef double real;

Если при описании имени стоит слово typedef, то описание не выделяет память, а создает новый тип данных (в данном случае – real), который можно применять также как и любое другое описание типа:

real a, b;

В случае структуры имеем:

typedef struct { char name[21];

float price;

int number;

} GOODS;

GOODS goods1, goods2; - выделение памяти для переменных goods1 и goods2.

Трактовка имени структуры.

Имя структуры обозначает значение всей области памяти, которую она занимает. Поэтому для структур одного и того же типа допускается операция присваивания:

goods2 = goods1;

При этом вся область памяти goods1 копируется в область памяти goods2.

Доступ к элементу структуры.

Для этого используется операция "." (точка).

goods1.name - образовалось составное имя.

Тип составного имени такой же как тип соответствующего элемента структуры.

С составным именем можно выполнять любые действия, разрешенные для типа элемента.

goods2.price = 20*goods1.price;

scanf("%s", goods1.name);

Из структур можно составить массив:

GOODS ab[50];

Тогда ab - адрес массива;

ab[2] - значение структуры;

ab[2].price - значение элемента структуры.

Структура может входить в другую структуру:

typedef struct {

GOODS goods;

int fl;

} GF;

GF a; - описание

a.good.name – доступ к члену name вложенной структуры.

Никаких ограничений на уровень вложенности структур нет.