Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10.Структуры.docx
Скачиваний:
3
Добавлен:
23.08.2019
Размер:
25.92 Кб
Скачать
  1. Как инициализировать структуру?

Вывод значений полей структуры осуществляется аналогично переменным с учетом их типа:

printf("Имя: %s\n", manager.name);

printf("Возраст: %d\n", manager.age);

printf("Зарплата: %g\n", manager.salary);

При вводе необходимо ставить амперсанд:

scanf("%d", &manager.age);

Оператор точка имеет более высокий приоритет, поэтому ставить скобки, т.е. писать &(manager.age) не нужно. К строке manager.name применимы функции gets() и puts():

gets(manager.name);

puts(manager.name);

Можно также обратиться к отдельным буквам этой строки:

printf("Имя начинается с буквы %c\n",

manager.name[0]);

  1. Как объявить массив структур?

важной причиной введения структур является желание работать со списком записей. Такой список представляется в виде массива структур. Аналогично обычному массиву, где элементами являются числа или символы, в массиве структур элементами являются структуры. Рассмотрим, как объявляется массив структур, в котором будет храниться информация о сотрудниках.

#define SIZE 5

Worker workers[SIZE];

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

Worker workers[SIZE] = {

{"Андрей", 30, 5000},

{"Светлана", 51, 2000},

{"Дмитрий", 45, 3000},

{"Анна", 28, 4000},

{"Василий", 37, 1000}

};

а можно и после объявления:

strcpy(workers[0].name, "Игорь");

workers[0].age = 53;

workers[0].salary = 2500;

strcpy(workers[1].name, "Демьян");

workers[1].age = 57;

workers[1].salary = 1500;

Причем грамотная группировка элементов выглядит именно так, как показано выше, а не так:

//Неправильная группировка!

strcpy(workers[0].name, "Игорь");

strcpy(workers[1].name, "Демьян");

workers[0].age = 53;

workers[1].age = 57;

workers[0].salary = 2500;

workers[1].salary = 1500;

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

  1. Что такое поле структуры и как к ним обращаться?

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

Worker manager;

strcpy(manager.name, "Сергей");

manager.salary = 1000.55;

manager.age = 33;

Обратите внимание на то, что поля manager.salary и manager.age являются обычными переменными, и работать с ними нужно, как с переменными. Поле manager.name является строкой, поэтому вместо присваивания мы используем функцию strcpy().

  1. Что такое вложенные структуры?

Пусть для каждого сотрудника требуется хранить его адрес, который состоит из нескольких полей: улица (street), номер дома (house) и номер квартиры (flat). В таком случае адрес разумно также представить в виде структуры

struct Address {

char street[50];

int house;

int flat;

};

и одним из полей структуры Worker сделать структуру Address

struct Worker {

char name[20];

int age;

float salary;

Address address;

};

Обращение к полям вложенной структуры Address происходит через поля структуры Worker; например, задать адрес сотрудника и вывести его на экран можно так:

strcpy(manager.address.street, "Ленина");

manager.address.house = 10;

manager.address.flat = 7;

printf("Улица: %s\n", manager.address.street);

printf("Дом: %d\n", manager.addrress.house);

printf("Квартира: %d\n",manager.address.flat);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]