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

1.5. Инициализация переменной структурного типа

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

Пример 14.3

Инициализация структуры, содержащей информацию о музыкальной коллекции на CD:

struct cd_info

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

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

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

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

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

};

cd_info cd={"Red Moon Men",

"Sam and the Snuds",

12,

11.95,

"02.13.12"};

Значения переменным-полям присваиваются в порядке их объявления при определении структурного типа.

Можно совмещать описание шаблона структуры и структурной переменной в одном предложении. Разрешается выполнять инициализацию полей структурной переменной при ее описании. Для инициализации структурной переменной значения ее полей перечисляются в фигурных скобках в порядке, соответствующему описанию полей.

Пример 14.33

Пример совмещения описания шаблона, описания структурных переменных и инициализации полей переменный в одном предложении:

struct Student // Описание шаблона структуры

{ char *fio; // Фамилия - указатель на char

char Adress[40]; // Адрес - строка

int Age; // Возраст-год рождения - целое

int oc[4]; // Оценки - целочис. массив

float sr; // Средний балл - вещественное

}

S, S1, // Описание переменных S,S1,S2

S2={ "Иванов", // и инициализация полей S2

"г. Москва, ул Цветочная, д.1, кв.43 ",

1991,

{4,3,5,4,5}, //Инициализация поля - массива (int oc[4]; )

0

};

Внешние и статические структуры можно инициировать, помещая следом за определением список начальных значений элементов:

                  struct anketa a0={ 1024, "Макагон В.М", "10.01.1943",0 , "Москва, Жукова, 23/99", 175.00};

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

Ниже определена и инициализирована переменная структура mag.

magazin mag = {"Nature", 3, 1995);

1.6. Операции со структурами

Действия над структурами, в общем, ограничены.

Над структурами возможны следующие операции:

- присваивание значений одной структурной переменной другой структурной переменной, при этом обе переменные должны иметь один и тот же тип;

- получение адреса переменной с помощью операции &;

- осуществление доступа к членам структуры.

–передавать в виде параметров функции, возвращать в виде результата функции.

Для переменных одного и того же структурного типа определена операция присваивания. Например, можно записать

s1=s2;

при условии, что s1, s2 – переменные одного структурного типа созданы на базе одного шаблона student.

При этом происходит поэлементное копирование значений соответствующих полей.

После такого присваивания поля структуры s1 будут содержать ту же информацию, что и поля s2.

Пример 14.78:

struct point pt={105,15},pt1;

pt1=pt;

В результате выполнения этого присваивания в pt1.x будет записано значение 105, а в pt1.y – число 15.

Если мы опишем две структуры с одними и теми же полями, но первая структура будет иметь шаблон student1, а вторая student2, то присваивание s1=s2 недопустимо.

Структуры нельзя сравнивать. Структуры нельзя сравнивать операциями ==, /=, < , > и т.п. Сравнивать можно только значения конкретных полей.

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

Записи нельзя копировать или присваивать как единое целое; их нельзя передавать в функцию или получить оттуда целиком. Однако, к указателям на структуры это замечание не относится.