Объявление структуры
Имена "объявления структуры" тип и определяют последовательность переменных, вызываемых значений ("участники" или "поля"), структуры могут иметь различные типы.Необязательный идентификатор с именем "тег" предоставляет имя типа структуры и может использоваться в последующих ссылках на тип структуры.Переменная типа структуры содержит всю последовательность определяется этим типом.Структуры в c# аналогичны типам называемый "запись" на других языках.
Синтаксис
структура-или-соединени-описатель.
идентификатор структура-или-соединенияOpt**{** структура-объявление-список }идентификатор структура-или-соединения
структура-или-соединение.
structunion
структура-объявление-список.
структура-объявлениеструктура-объявление структура-объявление-списка
Содержимое структуры определяется как
структура-объявление.
структура-декларатор-список описатель-квалификатор-списка ;описатель-квалификатор-список.
описатель-квалификатор-список тип-описателя Optописатель-квалификатор-список тип-квалификатора Opt
структура-декларатор-список.
структура-деклараторструктура-декларатор-список " структура-декларатор
структура-декларатор.
declarator
Объявление типа структуры не устанавливает в сторону места для структуры.Только шаблон для объявления переменных структуры.
Ранее указанное Идентификатор (тег) может использоваться для обращения к типу структуры, указанному в другом месте.В этом случае структура-объявление-список не удается повторенно, пока определение видимым.Объявления указателей к структурам и определения типов для типов структуры могут использовать тега структуры, прежде чем тип структуры определен.Однако определение структуры должна возникнуть в любой существующей использования размера полей.Это неполное определение типа и тега типа.Для данного определения завершения, определение типа должно использоваться позже в той же области.
структура-объявление-список определяет типы и имена членов структуры.A структура-объявление-список аргумент содержит один или несколько объявления переменной или бит-поля.
Каждая переменная, объявленная внутри структура-объявление-список определяет как член типа структуры.Переменные внутри объявления структура-объявление-список иметь ту же форму, что и другие переменные объявления, описываемые в этом разделе, за исключением того, что объявления не могут содержать описатели или инициализаторы хранени-класса.Члены структуры могут иметь все переменные типов, отличных от типа void, неполный тип или тип функции.
Член не могут быть объявлены, что доступен тип структуры, в которую он отображается.Однако элемент может быть объявлен как указатель на структуру типа, в которой он появляется, если тип структуры имеет тега.Это позволяет создать связанные списки структур.
Структуры следует тем же области, что и другие идентификаторы.Идентификаторы структуры должны быть определены из других структуры, объединения и тегов перечисления с одной и той же видимостью.
Каждое структура-объявление в выражении структура-объявление-список быть уникальным в пределах списка.Однако имена идентификаторов в выражении структура-объявление-список определяться от обычных имен переменных или из других идентификаторов в списках объявления структуры.
Вложенные структуры можно также получить доступ, как если бы они были объявлены на уровне файл-области.Например, если это объявление:
struct a
{
int x;
struct b
{
int y;
} var2;
} var1;
эти объявления обоих законны:
struct a var3;
struct b var4;
Примеры
Эти примеры иллюстрируют объявления структуры:
struct employee /* Defines a structure variable named temp */
{
char name[20];
int id;
long class;
} temp;
employee макет содержит 3 элементов: name" idи class.name элемент массив элементов и 20 id и class простые элементы с int и long тип соответственно.Идентификатор employee идентификатор структуры.
struct employee student, faculty, staff;
В этом примере определяется переменной структуры: 3 student" facultyи staff.Каждая структура имеет такой же список 3 элементов.Объявленные элементы, имеющие тип макета employee, указанное в предыдущем примере.
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
complex структура имеет член с 2 Плавающая область тип x и y.Тип структуры не оказывает никакого тега и поэтому безымянен или анонимный.
struct sample /* Defines a structure named x */
{
char c;
float *pf;
struct sample *next;
} x;
Первые 2 члена структуры a char переменная и указатель к a Плавающая область значения.Третий элемент nextобъявляет как указатель, тип структуры (определяннымsample).
Анонимные структуры могут быть полезны, если именованный тег не требуется.Это необходимо тогда, когда одно объявление определяет все экземпляры структуры.Примеры.
struct
{
int x;
int y;
} mystruct;
Встроенные макеты часто анонимными.
struct somestruct
{
struct /* Anonymous structure */
{
int x, y;
} point;
int type;
} w;
Только для систем Microsoft
Компилятор разрешает неклееный или массив нулевого размера в качестве последнего члена структуры.Это может быть полезно, если размер массива отличается при использовании constant в различных ситуациях.Объявление такой структуры выглядит следующим образом:
struct Идентификатор**{** набор--объявления массив-имя типа[];};
Неклееные массивы могут появляться только в качестве последнего члена структуры.Объявления массива структур, содержащих неклееные могут быть вложены в другие структуры, пока никакие более добавочные члены не объявляются в любом из включающего структурах.Массивы таких структур недопустимы.sizeof оператор применяется к переменной типа или к типу наиболее, занимает 0 для размера массива.
Объявления структуры также могут быть указаны без декларатора при их члены других структуры или объединения.Имена полей повышенн уровеньы во включающем структуру.Например, безыменная структура выглядит следующим образом:
struct s
{
float y;
struct
{
int a, b, c;
};
char str[10];
} *p_s;
.
.
.
p_s->b = 100; /* A reference to a field in the s structure */
См. Структура и члены объединения дополнительные сведения о ссылках структуры.
ЭЛЕМЕНТ, относящийся Майкрософт