A.6 Структуры |
Предыдущая Содержание Следующая |
Структуры собирают компоненты разных типов. Структуры, компоненты и переменные могут иметь одинаковые имена:
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 ок, явное преобразование
|
Предыдущая Содержание Следующая |