Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Структуры (struct)

.pdf
Скачиваний:
25
Добавлен:
10.08.2019
Размер:
105.1 Кб
Скачать

vk.com/club152685050

Структуры

Структура является совокупностью элементов произвольных типов, в отличие от

массивов, который поддерживает элементы одного типа. struct [ имя_типа ] {

тип_1 элемент_1; тип_2 элемент_2;

...

тип_n элемент_n;

} [ список описателей ];

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

Пример. Определение массива структур и указателя на структуру: struct {

char fio[30]; int date, code; double salary;

} staff[100], *ps;

Описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами. Например, в следующем примере определяется новый тип, называемый address, который задает почтовый адрес:

struct address {

// имя

char* name;

long number;

// номер дома

char* street;

// улица

char* town;

// город

};

 

Для инициализации структуры значения ее элементов перечисляют в фигурных скобках

в порядке их описания

//Объявление переменной типа address и инициализация address addr1={"Ivanov", 174, "Nevsky pr.", "SPb"};

Доступ к полям структуры выполняется с помощью операций выбора . (точка) при

обращении к полю через имя структуры и -> при обращении через указатель, например: address m[10];

address * pa=new address; addr1.name="Petrov"; m[0].name=" Kibzun"; pa->number=123;

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

address addr2; addr2=addr1;

Два структурных типа считаются различными даже тогда, когда они имеют одни и те же

члены. Например, ниже определены различные типы: struct s1 { int a; };

struct s2 { int a; };

В результате имеем:

s1

x;

// ошибка: несоответствие типов

s2

y = x;

Кроме того, структурные типы отличаются от основных типов, поэтому получим:

s1 x;

= x;

// ошибка: несоответствие типов

int i

vk.com/club152685050

Структуру можно передавать в функцию в качестве параметра и возвращать в качестве

значения функции. void show(address a)

{cout<<"Имя: "<<a.name<<endl; cout<<"Номер дома: "<<a.number<<endl; cout<<"Улица: "<<a.street<<endl;

cout<<"Город: "<<a.town<<endl;

}

Вызов функции: show(addr1);

Имя типа становится доступным сразу после его описания. Таким образом можно в

описаниях типов полей структуры использовать имя типа самой структуры. struct list{

list* next; list* prev;

};

// ошибка - Элементы структуры могут иметь любой тип, кроме типа этой же структуры struct some_type{

some_type a;

}

Возможны ссылки двух и более структур друг на друга. Для того чтобы структура могла

быть использована в другой структуре, она должна быть заранее объявлена. struct list1;

struct list2{ list1* next; list1* prev;

};

struct list1{ list2* head;

};