Уровень 1

Порядок выполнения: à

Операторы: ( ) [ ] . ->

Первые два оператора означают: (...) – список аргументов процедуры, [...] – индексирование (вычисление индексного выражения).

Пример.

int *(*(*x)[6])(); // Указатель на массив из 6 указателей на функцию, возвращающей указатель на int.

Два последних оператора реализуют обращение к элементу структуры, причем оператор -> использует указатель на структуру.

Первый вариант обращения имеет вид:

<имя_структуры> . <имя_элемента или подструктуры> [. <имя_элемента или подструктуры>]...

Пример. Структура, описывающая произвольную дату.

struct date{

int day; // День месяца

int month; // № месяца

int year; // Год

int year_day; // № дня в году

char mon_name[4];// Краткое название месяца

}data;

..............................................

data.year // Извлекается значение года

data.mon_name[2] // 3-я буква названия месяца

Пример. Объявление типа структуры (память не выделяется).

#define NameSize 25

#define AddrSize 40

...................................

struct person{

char name[NameSize]; // Фамилия И.О. студента

char address[AddrSize]; // Адрес

struct date birthdate; // Дата рождения

struct date insdate; // Дата поступления в институт

};

Размеры символьных массивов задаются с помощью символических констант. В качестве элементов структуры person используется ранее объявленный тип структуры date.

Определение переменной типа person:

struct person student;

Обращение к элементу структуры может иметь вид:

student.birthdate.month // Месяц рождения студента

Те же типы структур можно объявить с помощью инструкции определения типа typedef. Более того, такой способ является предпочтительным, поскольку при определении переменных не надо употреблять ключевое слово struct.

Пример.

typedef struct{

int day;

int month;

int year;

int year_day;

char mon_name[4];

} date;

typedef struct{

char name[NameSize];

char address[AddrSize];

date birthdate, insdate;

} person;

Определение переменных:

person student;

date *pd;

Обращение к элементу структуры имеет тот же вид, что и ранее:

student.birthdate.month

Для того, чтобы при обращении к элементу структуры использовать указатель и оператор ->, необходимо задать ему значение. Это можно сделать, например, так:

pd=&student.birthdate;

Тогда допустимо обращение вида:

(*pd).year

или

pd->year