Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
114-124!!!.docx
Скачиваний:
4
Добавлен:
11.09.2019
Размер:
53.35 Кб
Скачать
  1. Структуры и другие типы данных. Структуры С и C++: синтаксис и правила. Создание простой структуры.

Структура С или C++ аналогична массиву или вектору тесно связанных атрибутов. структура позволяет иметь смешанные атрибуты различных типов данных.

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

В языках С или C++ структура создается при помощи ключевого слова struct, за которым следуют необязательное поле тега (tag) и список элементов структуры.

struct поле_тега {

тип_элемента элемент 1;

тип_элемента элемент 2;

тип_элемента элемент З;

...

...

...

тип_элемента_элемент N;

};

Описание структуры является оператором С и C++.

в C++, отсутствует необходимость повторять ключевое слово struct.

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

#include<stdio.h>

#include<windows.h>

#define N 30

#define ABR 4

struct month {

int poriadok;

char nazvanie[20];

char abr[4];

int dni;

}month={ 7,

"Июль",

"июл",

31

};

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

printf("%d. %s Количество дней: %d Сокращенно: %s\n", month.poriadok, month.nazvanie, month.dni, month.abr);

}

  1. Доступ к элементам структуры. Инициализация структуры. Передача структур в функции.

Доступ к элементам структуры.

Любой элемент структуры может обрабатываться программой самостоятельно.

Для доступа к элементам структуры можно использовать:

  1. . («точка»)

  2. ->

Синтаксис операции«точка»:

stname.mname

В этой записи stname является переменной, связанной со структурным типом, а mname — это имя любой переменной-члена структуры.

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

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

Инициализация структуры.

Инициализации структуры аналагична инициализации простых переменных или массивов.Допускается выполнение инициализации элементов структуры. Классы памяти оказывают влияние на структуры аналогично обычным идентификаторам.

Можно ли инициализировать и структурную переменную? Да, если структурная переменная будет внешней или статической.Здесь следует иметь в виду, что принадлежность структурной переменной к внешнему типу зависит от того, где определена переменная, а не где определен шаблон.

Передача структур в функции.

Очень часто необходимо передать в функцию информацию о структуре; при этом информация передается по значению. Поскольку передается только копия информации, функция не может изменить содержимое исходной структуры. Структуру можно передать в функцию при помощи, следующей синтаксической конструкции:

fname(stvariable);

/* Объявление структуры, допустимое в С и C++ */

void vprint_data(struct stboat stany_boat);

// Объявление структуры, возможное только в C++//

void vprint_data(stboat stany_boat);

Если передавать полные копии структур в функции, то нередко можно снизить эффективность программы. В приложениях, критичных ко времени, лучше использовать указатели.

  1. Массив структур. Описание массива структур. Определение элементов массива структур.

Часто структуры рассматриваются как массивы разнотипных данных.

Описание массива структур.

Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива:

structbooklibry [MAXBKS];

Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Имя libry само по себе не является именем структуры; это имя массива, содержащего структуры.

Определение элементов массива структур.

При определении элементов массива структур мы применяем те же самые правила, которые используются для отдельных структур: сопровождаем имя структуры операцией получения элемента и именем элемента:

libry [0].valuevalue — первый элемент массива

libry [4].titletitle — пятый элемент массива

Заметим, что индекс массива присоединяется к libry, а не к концу имени:

libry.value[2] /* неправильно */

libry[2].value /* правильно */

индексы, находящиеся справа от операции ".", относятся к отдельным элементам, в то время как индексы, расположенные слева от операции, относятся к массивам структур.

  1. Вложенные структуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]