Язык программирования C



         

Описание структур и объединений - часть 2


struct идентификатор {список-описаний-структуры} union идентификатор {список-описаний-структуры}

описывает идентификатор в качестве ярлыка структуры (или ярлыка объединения) структуры, специфицированной этим списком. Последующее описание может затем использовать третью форму спецификатора, один из

struct идентификатор union идентификатор

Ярлыки структур дают возможность определения структур, которые ссылаются на самих себя; они также позволяют неоднократно использовать приведенную только один раз длинную часть описания. Запрещается описывать структуру или объединение, которые содержат образец самого себя, но структура или объединение могут содержать указатель на структуру или объединение такого же вида, как они сами.

Имена членов и ярлыков могут совпадать с именами обычных переменных. Однако имена ярлыков и членов должны быть взаимно различными.

Две структуры могут иметь общую начальную последовательность членов; это означает, что тот же самый член может появиться в двух различных структурах, если он имеет одинаковый тип в обеих структурах и если все предыдущие члены обеих структур одинаковы. (Фактически компилятор только проверяет, что имя в двух различных структурах имеет одинаковый тип и одинаковое смещение, но если предшествующие члены отличаются, то конструкция оказывается непереносимой).

Вот простой пример описания структуры:

struct tnode { char tword[20]; int count; struct tnode *left; struct tnode *right; };

Такая структура содержит массив из 20 символов, целое и два указателя на подобные структуры. Как только приведено такое описание, описание

struct tnode s, *sp;

говорит о том, что s является структурой указанного вида, а sp является указателем на структуру указанного вида. При наличии этих описаний выражение

sp->count

ссылается к полю count структуры, на которую указывает sp; выражение

s.left

ссылается на указатель левого поддерева в структуре s, а выражение

s.right->tword[0]

ссылается на первый символ члена tword правого поддерева из s.




Содержание  Назад  Вперед