Учебное пособие Самара 2015 + 004. 43 Ббк 32. 973 Н 19


Download 1.98 Mb.
bet19/53
Sana15.08.2023
Hajmi1.98 Mb.
#1667321
TuriУчебное пособие
1   ...   15   16   17   18   19   20   21   22   ...   53
Bog'liq
Lekcii AiSD 2015

Структуры



Структура является набором логически связанной инфор- мации, возможно, различных типов, объединённым в единый программный объект. Термин «структура» в Си/Си++ является синонимом понятия «зплпсь», используемого в Паскале. Оба термина являются взаимозаменяемыми. Структура может озна- чать как тип данных, так и объект этого типа. Определение структурного типа в Си/Си++ напоминает определение записи в Паскале, но в Си/Си++ отсутствуют некоторые ограничения Пас- каля на размещение указателей.

struct Student


char FirstName[10];


char SecondName[15], Surname[20]; int Age;
char Dept[10]; int Year;
Отдельные компоненты структур часто называют полями. Объекты структурных типов, также часто называемые структу- рами, определяются следующим образом:
S 4 uden L P e L rov; // Объявление структуры типа Student S 4 uden L i 31 [ 21 ) ; // массив структур

Объекты структурного типа могут быть инициализированы, если имеют статический класс памяти, набором значений соот- ветствующих типов, заключённых в фигурные скобки и располо- женных в порядке объявления полей структуры, подобно тому, как инициализируются массивы. Поля, оставшиеся неинициали- зированными, получают нулевые значения или эквивалентные нулю.


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

59
массива помещаются внутри отдельной пары фигурных скобок, аналогично инициализации двумерного массива. Если число инициализирующих значений равно числу полей структуры во всех элементах массива, то внутренние фигурные скобки могут быть опущены.


Доступ к компонентам структуры происходит при помощи операции «точка»:
Petrov.Year = 3;

Имя структурного типа при его определении может отсутст- вовать, если в программе имеется одна или несколько структур только одного типа.


struct { /* поля структуры */ } st1, st2, st3;

Операция & позволяет получить адрес структуры, который может храниться в указателе.


Student *r32; // указатель на структуру r32 — адрес структуры типа Student
*r32 сама структура

Если имеется указатель на структурный тип, содержащий адрес реально существующей структуры, то доступ к полям с по- мощью указателя выполняется следующим образом:


(*r32).Age = 30;

Приоритет операции «точка» выше, чем операции *, поэто- му круглые скобки в данном случае необходимы. Возможна дру- гая, чаще используемая, форма доступа к полям структуры через указатель при помощи операции —v


r32—>Age = 30;

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


Student& PrintInfo(Student&);
60
Поля структуры могут быть любого типа, стандартного или созданного программистом и известного к моменту его использо- вания. Существует только одно исключение. Поле структуры не может иметь такой же тип, как и структура, компонентом кото- рого это поле является. Но поле может быть указателем на струк- туру определяемого типа.
struct Err

{ Err d; ... struct Corr
// Ошибка

{ Corr *pc; }; // Правильно

Полем определяемого структурного типа может быть структура, тип которой уже определён.


struct Beg{...} golf;
struct next{ Beg st; ...};

Если в определении структурного типа нужно в качестве элемента использовать указатель на структуру другого типа, то разрешена такая последовательность определений.


struct А; // Неполное определение struct В {struct А *ра};
struct А {struct В *pb};

Неполное определение структурного типа А можно исполь- зовать в определении структурного типа В, так как определение указателя ра на структуру типа А не требует информации о раз- мере структуры типа А. Последующее определеНl4е структурного типа А оdязательно. Использование в структурах типа А указа- телей на структуры уже введенного типа В не обладает какими- либо дополнительными особенностями и не требует пояснений.


Структурный тип может быть определен с помощью специ—
фикатора typedef.
typedef struct { double Re, lm; } complex; complex Z1,Z2;

struct a1





int oscar;

61


struct a2



а 1 1ima ; // поле ранее определенного структурного типа
) 4anqo i // совместное определение структурного типа и его объекта

La nqo . 1ima . о scar= 2 5 6 i // доступ к вложенному полю объ- екта La nqo






      1. Download 1.98 Mb.

        Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   ...   53




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling