Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
138
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

Структуры

Структура — это совокупность нескольких переменных под единым именем, рассматриваемых как одно целое. В отличие от массива, переменные в структуре могут иметь различные типы. Переменные внутри структуры называются ее членами или полями. Структуры могут содержать данные любых типов Си, в том числе массивы и другие структуры.

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

Синтаксис:

struct имя_структуры{

элемент(ы)_структуры;

} имя_переменной;

struct – ключевого слова, которое определяет структуру;

имя_ структуры - имя создаваемого структурного типа;

имя_переменной – переменная данного структурного типа.

Если структура определяется без объявления переменных, то такое определение является всего лишь шаблоном, который можно использовать позже в программе для объявления струк­турных переменных. Такой шаблон имеет следующий формат:

struct имя_структуры { /*определен шаблон структуры */

элемент(ы)_структуры; /* и определен новый тип – struct имя_структуры*/

};

Объявление переменных с использованием этого шаблона структуры имеет следую­щий вид:

struct имя_структуры имя_переменной;

Это объявление будет синтаксически правильным только в том случае, если ранее была определена структура с заданным именем_ структуры.

С помощью ключевого слова typedef создается синоним структурного типа:

typedef struct {

элемент(ы)_структуры;

} имя_типа_структуры;

----------------------------

|

синоним

Далее определяем переменную данного типа:

имя_типа_структуры имя_переменной ;

Обратите внимание, что созданный таким образом тип отличается от имени_шаблона структуры.

Выбор между typedef и именем_шаблона структуры является делом вкуса. Большой практической разницы тут нет. Определение типа через typedef несколько короче, потому что не надо пи­сать ключевого слова struct. С другой стороны, использование этого слова и имя_шаблона структурного типа ясно показывает, что объявляется именно структура, и это удобно для програм­миста при чтении кода.

Примеры

На Паскале:

На Си:

a : record

b : char;

c : integer;

end;

имя структуры

|

-----

struct bc {

char b;

int c;

} a ;

---

|

имя переменной

имя структуры

|

-----

struct bc {

char b;

int c;

};

struct bc a;

Type

t = record

b : integer;

c : char;

end;

Var

a : t;

typedef

struct

{ int b;

char c;

} t;

t a;

Инициализация и обращение к полям структуры

Отдельные элементы структуры могут использоваться точно так же, как простые пере­менные тех же типов. Чтобы извлечь их значения из структуры, применяется знак операции обращения к элементу структуры (.), представляющий собой точку между именем структуры и именем элемента-поля. И в языке Си нет даже близкого аналога Паскалевского оператора with do;.

Пример

struct bc {

char b;

int c;

} a1 = {30, ‘B’}, a2;

struct bc {

char b;

int c;

};

struct bc a1 = {30, ‘B’}, a2;

typedef

struct

{ int b;

char c;

} t;

t a1 = {30, ‘B’}, a2;

a1.b = 10; a2.b = 20;

a1.c = ‘A’; a2.c = ‘Z’;

Структуры можно присваивать: a1 = a2;, что эквивалентно a1.b = a2.b; a1.c = a2.c;

Присваивание возможно только в том случае, если переменные а1 и а2 объявлены одним шаблоном. Если шаблоны имеют разные имена, но одинаковое описание, то такое присваивание невозможно.