Объявление структур и определение структурных объектов

Использование в программе структуры предполагает вначале определение (объявление) структуры-шаблона (типа структуры) и его структурного объекта (структурной переменной). Возможны их раздельное и совместное определения. Для шаблона структуры (с именем или без него) компилятор не выделяет в памяти компьютера место под структуру, а лишь фиксирует правила, необходимые для формирования структурного объекта (структурной переменной).

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

Ключевое слово 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.