Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП - ПОИТ (Бахтизин) часть 1 редакт.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

8.2. Инициализация структурных переменных

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

struct base m1 =

{1, “генератор”, 100.5, 100, “частота 460 Гц”};

Инициализация структуры во время объявления:

struct base

{

int n;

char name[20];

float cost;

int quant;

char note[100];

} m1 = {1, “генератор”, 1.2, 100, “сдан в ремонт”};

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

. обращение к элементу структуры;

-> обращение к элементу структуры через указатель на структуру;

В следующем выражении полю n уже объявленной ранее структурной переменной m1 присваивается значение 1:

m1.n = 1;

m1.name = “генератор”; // неправильно, т.к. name – массив,

// т.е. указатель-константа

strcpy(m1.name, “генератор”); // правильно

m1.cost = 1.2;

Чтобы вывести на экран поле структуры n нужно написать следующее выражение:

printf(“%d”, m1.n);

В общем виде доступ к членам структуры с помощью оператора точка выглядит так:

имя_объекта.имя_члена

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

struct base m1, m2, m3;

m1 = m2; // присваиваем одну структуру другой

m1 = m2 = m3;

8.3. Вложенные структуры

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

Допустим, имеется две структуры:

struct base1

{

int quant;

float cost;

char note[100];

};

struct base2

{

int n;

float cost;

char note[100];

};

Эти структуры содержат разные данные, но имеют совпадающие поля (cost и note), которые могут быть объединены в третью структуру.

struct base3

{

float cost;

char note[100];

};

Следующим образом можно использовать эту структуру как элемент другой структуры:

struct base1

{

int quant;

base3 thing;

} m1;

struct base2

{

int n;

base3 thing;

} m2;

В этом описании – 3 структуры, а в структурах base1 и base2 – по 2 элемента.

Можно также присваивать значения элементам вложенной структуры при помощи оператора точка, но при этом нужно использовать вложенность в операторе точно так же, как и в самой структуре. Например, для присвоения полю cost 2-ой структуры значения 2.3 нужно записать следующее:

m2.thing.cost = 2.3;

Аналогично - для присвоения полю cost 1-ой структуры значения 2.3 нужно записать следующее:

m1.thing.cost = 2.3;