Объявление структур и определение структурных объектов
Использование в программе структуры предполагает вначале определение (объявление) структуры-шаблона (типа структуры) и его структурного объекта (структурной переменной). Возможны их раздельное и совместное определения. Для шаблона структуры (с именем или без него) компилятор не выделяет в памяти компьютера место под структуру, а лишь фиксирует правила, необходимые для формирования структурного объекта (структурной переменной).
В момент определения структурного объекта компилятор выделяет место в памяти, где размещаются все компоненты структуры в соответствии с заданным шаблоном.
Ключевое слово struct сообщает компилятору об объявлении структуры. Допустимы три основные формы объявления структур.
1) С поименованным шаблоном:
struct ИмяСтруктурногоТипа {ОпределенияЭлементов};
где ИмяСтруктурногоТипа – идентификатор типа структуры. Следует обратить внимание на точку с запятой, которой заканчивается определяемая структура;
ОпределенияЭлементов – список определений типизированных компонентов (полей), из которых образуется шаблон структуры. Он в общем случае представляется так:
Тип1 Компонент11 [,Компонент12,...];
...................................
ТипК КомпонентК1 [,КомпонентК2,...];
Здесь допустимы компоненты различных типов. Все имена компонентов уникальны. Шаблон имеет видимость. Если он объявлен внутри блока, то это локальный шаблон, видимый только внутри него.
Например:
struct STUDENT {
char name[50]; //Ф.И.О
int passw; //шифр зачетной книжки
};
При указанной форме объявления структуры структурные объекты определяются ниже в виде отдельной строки:
ИмяСтруктурногоТипа СписокСтруктур;
где СписокСтруктур – список идентификаторов, соответствующих именам структурных объектов.
Структурные объекты можно определить так:
STUDENT group0l, group02, //структурные объекты
*univers, //указатель на структурный объект
fam[100]; //массив структурных объектов
При определении структурного объекта (структурной переменной) СтруктурныйОбъект допустима инициализация его компонентов (полей):
struct ИмяСтруктурногоТипа СтруктурныйОбъект = {Инициализатор1,
Инициализатор2,
..............
ИнициализаторK
};
Для вышеприведённого примера возможно следующее:
struct STUDENT group0l = {
"Сидоров ",
};
2) С совмещением определения структуры и структурных объектов:
struct ИмяСтруктурногоТипа {ОпределенияЭлементов}
СписокСтруктур;
Структурный объект при такой схеме определения может быть также инициализирован.
Например, структура типа STUDENT с элементами ФИО и номером зачётной книжки:
struct STUDENT {
char name[50];
int passw;
} *univers,//указатель на структурный объект
fam[100],//массив структурных объектов
group0l = {"Сидоров А.И.", 26276};
//инициализированный объект
При рассматриваемом подходе ИмяСтруктурногоТипа (STUDENT) можно опустить.
В пределах программы допустим один непоименованный тип структуры.
3) С использованием оператора typedef:
typedef struct [ИмяСтруктурногоТипа]
{ОпределенияЭлементов}
ОбозначениеСтруктурногоТипа;
где ОбозначениеСтруктурногоТипа – синонимы типа структуры. Это упрощает программу при определении структурных объектов. Кроме того, в упрощённом определении имя типа структуры можно опустить.
Например:
typedef struct {
char name[50];
int passw;
} NSTUstudent;
//NSTUstudent - псевдоним типа структуры
Определение структурного объекта для данного случая можно организовать так:
NSTUstudent *pt, //указатель на структуру
groupStudent; //структурная переменная
Здесь также допускается инициализация определяемых структурных объектов.
Можно определить структуру с использованием макроопределения:
#define Идентификатор struct ИмяТипа
Далее следует
Идентификатор {ОпределенияЭлементов};
Например:
#define COMPLEX struct R7
COMPLEX {
float real;
float imag;
};
Дата добавления: 2015-02-16; просмотров: 885;