Порядок выполнения: à
Операторы: ( ) [ ] . ->
Первые два оператора означают: (...) – список аргументов процедуры, [...] – индексирование (вычисление индексного выражения).
Пример.
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