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
Необязательный список классов или структур, из которых эта структура будет наследовать члены. Дополнительные сведения см. в разделе Базовые классы . Перед именем каждого базового класса или структуры может предшествовать описатель доступа (public, private, protected) и ключевое слово virtual . Дополнительные сведения см. в таблице доступа к членам статьи Управление доступом к членам класса .
список членов
Список членов структуры. Дополнительные сведения см. в статье Общие сведения о членах класса . Единственное отличие заключается в том, что 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
Основы программирования на языке C
Главная / Программирование / Основы программирования на языке C / Тест 14
Упражнение 1:
Номер 1
Как обратиться к полям структуры student?
Ответ:
 (1) student.id 
 (2) student..name 
 (3) student:age 
 (4) student(sex) 
Упражнение 2:
Номер 1
Как объявить указатель на структуру?
Ответ:
 (1) struct student *new_student 
 (2) student 
 (3) struct 
Номер 2
Как обратиться к элементу массива структур?
Ответ:
 (1) a[0].
sex  (2) a[1].name 
 (3) a[5].id 
 (4) a[0].age 
Номер 3
Как передать в функциюf
указатель на структуруhealt_record
?
Ответ:
 (1) передать указатель на структуру: f(&healt_record)
 
 (2) передать непосредственно структуру (но только с поверхностным копированием): f (healt_record)
 
 (3) с помощью взятия адреса функции с передачей непосредственно структуры:
 
 (4) обратиться к функции как к записи структуры: healt_record. f
 
Упражнение 3:
Номер 1
Как обратиться к элементу структуры при помощи указателя?
Ответ:
 (1) new_student<id 
 (2) new_student->id 
 (3) new_student*id 
 (4) new_student-id 
Номер 3
Какое служебное слово у объединения?
Ответ:
 (1) unoins 
 (2) union 
 (3) join 
 (4) collect 
Упражнение 4:
Номер 1
Для чего используется спецификатор typedef
?
Ответ:
 (1) позволяет создать свое собственное имя типа 
 (2) позволяет определить синоним типа данных 
 (3) для замены формальных параметров в функциях на фактические 
Номер 3
Какие данные объединяет структура?
Ответ:
 (1) структура объединяет логически связанные данные разных типов 
 (2) структура объединяет логически связанные данные только одинаковых типов 
 (3) структура объединяет логически связанные данные только целых типов 
 (4) структура объединяет логически связанные данные только неотрицательных целых типов 
Упражнение 5:
Номер 1
Чем отличаетсяtypedef
от#define
?
Ответ:
 (1) в отличии от #define
оператор typedef
объявляет символические имена, но ограничивается только типами данных 
typedef
игнорируется препроцессором   (3) в своих пределах оператор typedef
более гибок, чем #define
 
 (4) оператор typedef
ничем не отличается от #define
 
Номер 3
Чем отличается структура от массива?
Ответ:
 (1) в отличии от массива, который является однородным объектом, структура может быть неоднородной 
 (2) структура это составной объект, в который входят компоненты любых типов, за исключением функций, а массив является однородным объектом 
 (3) структура от массива ничем не отличается 
 (4) в отличие от массива, для хранения структуры может потребоваться больше места, чем для хранения всех её членов по отдельности 
Упражнение 6:
Номер 1
Для чего используются поля битов в структуре?
Ответ:
 (1) для обеспечения доступа к отдельным битам слова 
 (2) для экономии памяти 
 (3) для повышения быстродействия программы 
 (4) для увеличения спектра возможностей языка программирования Си 
Номер 2
Что называется переменной структурой?
Ответ:
 (1) в языке Си имеется тип данных, называемый переменной структурой, которая реализуется с использованием комбинации структуры и объединения 
 (2) в языке Си имеется тип данных, называемый переменной структурой, которая реализуется с использованием комбинации структуры и массива 
 (3) в языке Си имеется тип данных, называемый переменной структурой, которая реализуется с использованием комбинации структуры и перечисления 
 (4) в языке Си имеется тип данных, называемый переменной структурой, которая реализуется с использованием комбинации структуры и строки 
Номер 3
Может ли функция входить в структуру?
Ответ:
 (1) да 
 
 (3) да, но только типа void
 
 (4) да, но только типа int
 
Главная / Программирование / Основы программирования на языке C / Тест 14
Что такое структуры в C?.
Структуры в C могут быть использованы для того, чтобы… | Серджио ПьетриСтруктуры в C могут использоваться для создания пользовательских типов данных и специально используются в связанных списках путем создания «узлов». Поскольку связанные списки являются наиболее распространенным местом для использования структур, которые будут в центре внимания этой статьи.
Структуры — это типы данных, которые создает пользователь, и их лучше устанавливать в заголовочном файле вашей программы, чтобы к ним можно было получить доступ через любой файл, в который вы хотите их импортировать.
Пример файла заголовка *.h на CЭто пример файла заголовка со структурой узлов, которую может использовать односвязный список. Вы можете заметить следующие части:
- Ключевое слово typedef.
- Ключевое слово структуры.
- Мы используем структуру внутри структуры (подождите, что?).
- Внизу находится прототип функции.
Давайте уточним их:
typedef ключевое слово
Это ключевое слово, которое предоставляет C, которое позволяет программисту переименовывать тип данных. Поскольку мы создаем свои собственные структуры, может оказаться полезным дать им своего рода «прозвища», которые помогут вам лучше их запомнить.
В приведенном выше случае мы используем ключевое слово typedef для переименования структуры в «list_t». Таким образом, мы можем затем создать узел, вызвав тип следующим образом:
list_t *new_node;
Теперь программа уже знает, что под ‘list_t’ мы подразумеваем структуру, которая была создана в заголовке.
Проще говоря, вы также можете использовать typedef для переименования любого типа данных, например:
typedef unsigned long int BIGNUM;
Этот пример переименовывает unsigned long int
тип данных для BIGNUM, поэтому теперь вы можете объявить переменную как BIGNUM имя_переменной;
.
Как вы можете заметить, синтаксис typedef WhatYoullChange new_name
, поэтому у вас есть псевдоним в конце после закрывающей скобки.
ключевое слово struct
Именно благодаря структуре происходит волшебство! В нашем случае мы использовали его для создания узла «list_s», помните, что затем мы переименовали его в list_t, используя ключевое слово typedef.
Структуры будут хранить набор переменных, которые можно описать как разделы или блоки данных, необходимые для варианта использования X. Вы можете создать структуру под названием «Человек», которая сохраняет имя, возраст и рост любого заданного человека, например:
С другой стороны, в примере, который я привел вначале, мы используем структуру внутри самой структуры. Это означает, что структура содержит другую структуру, которая служит указателем на следующую структуру в списке (более известную как «узел»). Думайте об этом, как если бы у вас была большая коробка с еще одной крошечной коробкой внутри, которая содержит информацию о следующем ящике, который вам нужно найти.
Внизу есть прототип функции, который сообщает компилятору, что мы собираемся использовать эту функцию и что она должна быть скомпилирована, когда придет время.
Как использовать структуру в функции?
После обзора синтаксиса давайте посмотрим, как получить доступ к элементам структуры и как использовать их внутри функции:
Помните тот прототип в заголовке выше? Вот полная функция. Что это делает, так это печатает каждый элемент односвязного списка, следуя каждому указателю на следующий узел, пока он не достигнет NULL (если это произойдет, это означает, что следующего нет, а текущий узел является последним).
Функция возвращает число size_t и получает узел-указатель на первый узел в связанном списке.
Затем начинаем перебирать список! Каждый раз, когда указатель достигает узла, а следующий отличается от NULL, он будет печатать информацию в нем и добавлять 1 к нашей переменной «i» (итератор).
Мы обращаемся к каждому элементу узла с помощью стрелочной нотации ->
. Поскольку мы получаем этот указатель h
, мы обращаемся к каждому элементу внутри узла, на который он указывает, используя стрелку.
В конце функции вы можете увидеть h = h->next
. Помните, что каждый узел содержит местоположение следующего? Что мы делаем, так это перемещаем полученный указатель h
на следующий узел. Пока есть следующий узел, функция будет продолжать печатать и считать.
Другой способ доступа к переменным внутри структуры — использование точки. Например: в созданной выше структуре Person вы можете получить доступ к информации «имя» со следующим синтаксисом:
person_one.name
Структуры в C являются фундаментальной частью языка, обеспечивающей гибкость, и имеют множество других вариантов использования, отличных от указанных здесь.
Я призываю вас продолжать изучать C и все, что в нем есть, чтобы лучше понимать языки более высокого уровня!
Надеюсь, вам понравилась статья! Дайте мне знать, если у вас есть какие-либо отзывы.
Свяжитесь со мной в Твиттере: @SergioPietri
structures-c · Темы GitHub · GitHub
Вот 21 публичный репозиторий соответствует этой теме…
Ратешпрабакар / C-полная практика
Звезда 61амантивари8861 / C_Batch_11_to_12
Звезда 16Хафиз-Сакиб / Вложенные циклы-строки-массивы-указатели
Звезда 5ПракхарПиперсана / Алгоритмы планирования
Звезда 4Гоутамрайк / Структура и указатели в C
Звезда 1Наведуран / простая_оболочка
Звезда 1смешанное хозяйство / C-кульминация
Звезда 1самуэльселаси / alx-low_level_programming
Звезда 1h5rithd / Структуры данных и алгоритмы
Звезда 1Деррик1908 / Примеры C-кода
Звезда 0Звездорождение / С
Звезда 0БехнамАрдалани / Инвентарь для видеоигр
Звезда 0сетфрикинроллсин / С
Звезда 0Адвайтск / основные-cprograms
Звезда 0ДиегоМюриэльГ / Проекто-ЭДА-Экипо-10
Звезда 0Стефаниойр / crivo_eratostenes
Звезда 0Мчл-крпч / Список
Звезда 0эдфвр / alx-low_level_programming
Звезда 0Жадная птица / структуры
Звезда 0никселько / игральные карты
Звезда 0Улучшить эту страницу
Добавьте описание, изображение и ссылки на структуры-с страницу темы, чтобы разработчикам было легче узнать о ней.