Поделиться через


Объявление структуры

Имена "объявления структуры" тип и определяют последовательность переменных, вызываемых значений ("участники" или "поля"), структуры могут иметь различные типы.Необязательный идентификатор с именем "тег" предоставляет имя типа структуры и может использоваться в последующих ссылках на тип структуры.Переменная типа структуры содержит всю последовательность определяется этим типом.Структуры в c# аналогичны типам называемый "запись" на других языках.

Синтаксис

  • структура-или-соединени-описатель.
    идентификатор структура-или-соединенияOpt**{** структура-объявление-список }

    идентификатор структура-или-соединения

  • структура-или-соединение.
    struct

    union

  • структура-объявление-список.
    структура-объявление

    структура-объявление структура-объявление-списка

Содержимое структуры определяется как

  • структура-объявление.
    структура-декларатор-список описатель-квалификатор-списка ;

  • описатель-квалификатор-список.
    описатель-квалификатор-список тип-описателя 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 */

См. Структура и члены объединения дополнительные сведения о ссылках структуры.

ЭЛЕМЕНТ, относящийся Майкрософт

См. также

Основные понятия

Деклараторы и объявления переменной