A.6 Структуры

Предыдущая  Содержание  Следующая V*D*V

Структуры собирают компоненты разных типов. Структуры, компоненты и переменные могут иметь одинаковые имена:

 

struct u { int u; double v; } u;

struct v { double u; int v; } * vp;

 

Компоненты структур выбираются с помощью точки для переменных структуры и стрелки для указателей на структуры:

 

u.u = vp -> v;

 

Указатель на структуру может быть продекларирован даже если сама структура ещё не была представлена. Структура может быть объявлена без декларирования объектов:

 

struct w * wp;

struct w { ... };

 

Структура может содержать структуру:

 

struct a { int x; };

struct b { ... struct a y; ... } b;

 

Для доступа требуется полная последовательность имён компонентов:

 

b.y.x = 10;

 

Первый компонент структуры располагается сразу в начале структуры; таким образом структуры могут быть удлинены или укорочены:

 

struct a { int x; };

struct c { struct a a; ... } c, * cp = & c;

struct a * ap = & c.a;

 

  assert((void *) ap == (void *) cp);

 

ANSI-C не допускает ни неявные преобразования указателей к различным структурам, ни прямой доступ к компонентам внутренней структуры:

 

ap = cp;                         ошибка

c.x, cp -> x                     ошибка

cp -> a.x                        ок, полностью определено

((struct a *) cp) -> x           ок, явное преобразование

 

Предыдущая  Содержание  Следующая