Struct в си: Сложные типы данных в Си : структуры, объединения, битовые поля

struct (C++) | Microsoft Learn

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Ключевое struct слово определяет тип структуры и /или переменную типа структуры.

Синтаксис

[template-spec] struct [ms-decl-spec] [tag [: base-list ]]
{
   member-list
} [declarators];
[struct] tag declarators;
Параметры

спецификация шаблона
Необязательные спецификации шаблона. Дополнительные сведения см. в спецификациях шаблонов.

struct
ключевое слово struct;

ms-decl-spec
Необязательная спецификация класса хранения. Дополнительные сведения см. в ключевом слове __declspec .

Тег
Имя типа, присваиваемое структуре. Тег становится зарезервированным ключевым словом в области структуры. Тег является необязательным. Если он опущен, определяется анонимная структура. Дополнительные сведения см. в разделе «Типы анонимных классов».

base-list
Необязательный список классов или структур, из которых эта структура будет наследовать члены. Дополнительные сведения см. в разделе «Базовые классы «. Перед каждым базовым классом или именем структуры может предшествовать описатель доступа (открытый, частный, защищенный) и виртуальный ключевое слово. Дополнительные сведения см. в таблице доступа к членам класса в разделе «Управление доступом к членам класса «.

member-list
Список членов структуры. Дополнительные сведения см . в обзоре элемента класса . Единственное различие здесь заключается в том, что struct используется вместо class.

declarators
Список деклараторов, указывающий имена структуры. В списках деклараторов объявляются один или несколько экземпляров типа структуры. Деклараторы могут включать списки инициализаторов, если все элементы данных структуры.public Списки инициализаторов являются общими в структурах, так как элементы данных по умолчанию.public Дополнительные сведения см. в обзоре деклараторов .

Тип структуры — это пользовательский составной тип. Он состоит из полей или членов, которые могут иметь разные типы.

В C++структура совпадает с классом, за исключением того, что его члены по public умолчанию.

Сведения об управляемых классах и структурых в C++/CLI см. в разделе «Классы и структуры».

Использование структуры

В C необходимо явно использовать ключевое struct слово для объявления структуры. В C++не нужно использовать ключевое struct слово после определения типа.

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

Переменные структуры можно инициализировать. Инициализация каждой переменной должна быть заключена в скобки.

Дополнительные сведения см. в разделе «Класс», «Объединение» и «Перечисление».

Пример

#include <iostream>
using namespace std;
struct PERSON {   // Declare PERSON struct type
    int age;   // Declare member types
    long ss;
    float weight;
    char name[25];
} family_member;   // Define object of type PERSON
struct CELL {   // Declare CELL bit field
    unsigned short character  : 8;  // 00000000 ????????
    unsigned short foreground : 3;  // 00000??? 00000000
    unsigned short intensity  : 1;  // 0000?000 00000000
    unsigned short background : 3;  // 0???0000 00000000
    unsigned short blink      : 1;  // ?0000000 00000000
} screen[25][80];       // Array of bit fields
int main() {
    struct PERSON sister;   // C style structure declaration
    PERSON brother;   // C++ style structure declaration
    sister.
age = 13; // assign values to members brother.age = 7; cout << "sister.age = " << sister.age << '\n'; cout << "brother.age = " << brother.age << '\n'; CELL my_cell; my_cell.character = 1; cout << "my_cell.character = " << my_cell.character; } // Output: // sister.age = 13 // brother.age = 7 // my_cell.character = 1

Объявления структур | Microsoft Learn

  • Статья
  • Чтение занимает 4 мин

«Объявление структуры» именует тип и задает последовательность переменных значений («элементы» или «поля» структуры), которые могут иметь разные типы. Необязательный идентификатор — тег — предоставляет имя типа структуры и может использоваться в последующих ссылках на тип структуры. Переменная этого типа структуры включает определенную этим типом последовательность целиком. Структуры в языке C аналогичны типам, известным в других языках как «записи».

Синтаксис

спецификатор-структуры-или-объединения:
    struct-or-unionidentifieropt{struct-declaration-list}
    struct-or-unionidentifier

структура-или-объединение:
    struct
    

union

список-объявлений-структуры:
    struct-declaration
    struct-declaration-liststruct-declaration

объявление-структуры:
    specifier-qualifier-liststruct-declarator-list;

список-спецификаторов-и-квалификаторов:
    type-specifierspecifier-qualifier-listopt
    type-qualifierspecifier-qualifier-listopt

список-деклараторов-структуры:
    struct-declaratorstruct-declarator-list,struct-declarator

декларатор-структуры:
    declarator
    type-specifierdeclaratoropt:constant-expression

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

Это всего лишь шаблон для последующих объявлений структурных переменных.

Ранее определенный идентификатор (тег) можно использовать для ссылки на структурный тип, определенный в другом месте. В этом случае список-объявлений-структур невозможно повторить, пока определение видно. Объявления указателей на структуры и объекты typedef для типов структуры могут использовать тег структуры до определения типа структуры. Однако определение структуры необходимо получить до выполнения каких-либо фактических действий с размером полей. Это неполное определение типа и тега типов. Для того чтобы это определение стало полным, определение типа должно отображаться позже в той же области.

Список-объявлений-структуры задает типы и имена элементов структуры. Аргумент список-объявлений-структуры содержит одну или несколько переменных или объявлений битовых полей.

Каждая переменная, объявленная в списке-объявлений-структуры, определяется как элемент структурного типа.

Объявления переменных в списке-объявлений-структуры имеет ту же форму, что и другие объявления переменных, которые обсуждаются в этом разделе, с той разницей, что эти объявления не могут содержать описатели или инициализаторы класса хранения. Элементы структуры могут содержать любые типы переменной, кроме типа 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 содержит три члена: name, id и class. Член name — это 20-элементный массив, а id и class — простые элементы с типом int и long соответственно. Идентификатор employee является идентификатором структуры.

struct employee student, faculty, staff;

В этом примере определяются три переменных структуры: student, faculty и staff. Каждая структура имеет такой же список из трех элементов. Эти элементы объявлены как имеющие структурный тип employee, определенный в предыдущем примере.

struct           /* Defines an anonymous struct and a */
{                /* structure variable named complex  */
    float x, y;
} complex;

Структура complex содержит два элемента с типом float — x и y. Тип структуры не имеет тегов и, следовательно, является безымянным или анонимным.

struct sample   /* Defines a structure named x */
{
    char c;
    float *pf;
    struct sample *next;
} x;

Первые два элемента структуры — это переменная char и указатель на значение float . Третий элемент, next, объявляется как указатель на определяемый структурный тип (sample).

Анонимные структуры могут быть полезны, если именованный тег не требуется. Это происходит в том случае, если одно объявление определяет все экземпляры структуры. Пример:

struct
{
    int x;
    int y;
} mystruct;

Встроенные структуры часто являются анонимными.

struct somestruct
{
    struct    /* Anonymous structure */
    {
        int x, y;
    } point;
    int type;
} w;

Блок, относящийся только к системам Microsoft

Компилятор позволяет использовать безразмерный массив или массив нулевого размера в качестве последнего члена структуры. Это полезно, если размер константного массива различается при использовании в разных ситуациях. Объявление такой структуры выглядит следующим образом.

structidentifier{set-of-declarationstypearray-name[]; };

Безразмерные массивы могут отображаться только в качестве последнего члена структуры. Структуры, содержащие объявления безразмерных массивов, могут вкладываться в другие структуры при условии, что никакие другие элементы не объявлены ни в одной из внешних структур.

Массивы таких структур использовать не разрешается. Оператор 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 */

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

Завершение блока, относящегося только к системам Майкрософт

См. также

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

структура (С++) | Microsoft Узнайте

Обратная связь Редактировать

Твиттер LinkedIn Фейсбук Эл. адрес

  • Статья
  • 2 минуты на чтение

Ключевое слово struct определяет тип структуры и/или переменную типа структуры.

Синтаксис

 [спецификация-шаблона] структура [спецификация-ms-decl] [тег [: базовый список]]
{
   Список пользователей
} [деклараторы];
[struct] деклараторы тегов;
 
Параметры

спецификация шаблона
Дополнительные спецификации шаблона. Дополнительные сведения см. в разделе Спецификации шаблонов.

структура
Ключевое слово структура .

ms-decl-spec
Дополнительная спецификация класса хранения. Для получения дополнительной информации обратитесь к ключевому слову __declspec.

тег
Имя типа, присвоенное структуре. Тег становится зарезервированным словом в рамках структуры. Тег является необязательным. Если опущено, определяется анонимная структура. Дополнительные сведения см. в разделе Типы анонимных классов.

base-list
Необязательный список классов или структур, члены которых будут получены этой структурой. Дополнительные сведения см. в разделе Базовые классы. Каждому имени базового класса или структуры может предшествовать спецификатор доступа (public, private, protected) и ключевое слово virtual. Дополнительную информацию см. в таблице доступа к членам в разделе Управление доступом к членам класса.

список участников
Список членов структуры. Дополнительные сведения см. в разделе Обзор членов класса. Единственная разница здесь в том, что struct используется вместо class .

деклараторы
Список деклараторов, определяющий имена структур. Списки деклараторов объявляют один или несколько экземпляров типа структуры. Деклараторы могут включать списки инициализаторов, если все элементы данных структуры равны 9.0019 общедоступный . Списки инициализаторов распространены в структурах, потому что по умолчанию элементы данных public . Дополнительные сведения см. в разделе Обзор деклараторов.

Тип структуры — это определяемый пользователем составной тип. Он состоит из полей или членов, которые могут иметь разные типы.

В C++ структура аналогична классу, за исключением того, что ее члены по умолчанию являются общедоступными .

Сведения об управляемых классах и структурах в C++/CLI см. в разделе Классы и структуры.

Использование структуры

В C вы должны явно использовать ключевое слово struct для объявления структуры. В C++ вам не нужно использовать ключевое слово struct после определения типа.

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

Структурные переменные могут быть инициализированы. Инициализация каждой переменной должна быть заключена в фигурные скобки.

Дополнительные сведения см. в разделе class, union и enum.

Пример

 #include 
использование пространства имен std;
struct PERSON { // Объявить тип структуры PERSON
    инт возраст; // Объявить типы членов
    длинный сс;
    поплавковый вес;
    имя персонажа[25];
} член семьи; // Определяем объект типа PERSON
struct CELL { // Объявить битовое поле CELL
    короткий символ без знака: 8; // 00000000 ?????????
    короткий передний план без знака: 3; // 00000??? 00000000
    беззнаковая короткая интенсивность: 1; // 0000?000 00000000
    беззнаковый короткий фон: 3; // 0???0000 00000000
    короткое мигание без знака: 1; // ?0000000 00000000
} экран[25][80]; // Массив битовых полей
интервал основной () {
    структура PERSON сестра; // Объявление структуры в стиле C
    ЧЕЛОВЕК брат; // Объявление структуры в стиле C++
    сестра. возраст = 13; // присваиваем значения членам
    брат.возраст = 7;
    cout << "sister.age = " << сестра.возраст << '\n';
    cout << "brother.age = " << Brother.age << '\n';
    CELL my_cell;
    my_cell.character = 1;
    cout << "my_cell.character = " << my_cell.character;
}
// Выход:
// сестра.возраст = 13
// брат.возраст = 7
// my_cell.character = 1
 

Обратная связь

Отправить и просмотреть отзыв для

Этот продукт Эта страница

Просмотреть все отзывы о странице

Простое руководство по использованию структур в C

Автор Джером Дэвидсон

Делиться Твитнуть Делиться Делиться Делиться Электронная почта

Структуры — важная концепция C, которую необходимо понять. Как упрощенная версия класса, они могут предлагать такие преимущества, как удобочитаемость и повторное использование кода.

Структура (или структура) — это смешанный тип данных в C. Вы можете использовать его для хранения переменных разных типов.

Тип структуры сопоставим с классами в объектно-ориентированном программировании. Иногда вам может понадобиться присвоить значения объектам с одинаковыми свойствами. Вместо того, чтобы создавать несколько переменных для этих объектов в вашей программе на C, вы можете определить их в структура .

Создание структуры

Чтобы определить структуру, используйте ключевое слово struct , за которым следует имя структуры. Внутри структуры можно указать переменные разных типов:

 struct Car{ 
имя символа[45];
внутр колеса;
двойная стоимость;
} ;

Вы можете определить несколько экземпляров Car , добавив объявления этих экземпляров после правой фигурной скобки в объявлении struct :

 struct Car{ 
/* переменные */
} Car1, Car2, Car3;

Вы также можете вложить структуру в структуру. См. пример ниже:

 адрес структуры { 
int area_code;
символа street_name[45];
};
struct Person {
char name[60];
высота поплавка;
адрес структуры Persons_location;
};

Связано: Советы по программированию на C, которые вы должны изучить, чтобы начать работу

Операции над типами структур

Инициализация

Существует три способа инициализации элементов структуры.

Вы можете вставить значения, разделенные запятыми, в скобки {} , а затем присвоить их структуре. Обратите внимание, что значения должны быть в том же порядке, в котором вы объявили переменные.

 struct Car Car1 = {"Грузовик", 10, 65000}; 

Связано: Руководство для начинающих по стандартной библиотеке шаблонов в C++

Вы также можете назначать значения, не обращая внимания на порядок их объявления. См. пример ниже.

 struct Car Car2 = {
.cost = 45000,
.name = "Грузовик",
.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *