Структуры в Си. Доступ к элементам структуры. Инициализация. Вложенные структуры. Передача структуры в функцию. Массив структур. Доступ к структурам в C+
Создание новых типовТип переменной определяет: её размер в памяти, тип данных, которые она может хранить и операции, которые можно производить с этой переменной. Тип данных является категорией. В языке С++ программист может создать любой тип данных на основе базовых типов. Новые типы данных необходимо создавать для решения конкретных практических задач. Например: реализация работы деканата. Успех программы часто зависит от удачного выбора способа представления данных. С помощью структур возможно моделировать сложные объекты, возникающие при решении задач. Структуры представляют средство для доступа к записям, которые содержат поля одного или нескольких типов. Для использования структуры необходимо:
Шаблон структурыШаблон - это схема, описывающая содержание структуры. Установка структурного шаблона телефонный справочник: struct sprav { Данный шаблон описывает структуру с именем типа структуры sprav, состоящую из двух компонентов: строки fio и целой переменной num типа long. Имя типа структуры sprav необязательно и используется для ссылки на эту структуру. Компоненты структуры - данные любого типа, включая и другие структуры. Имя внутри структуры может быть таким же, как имя объекта вне структуры. Если шаблон описан внутри функции - он доступен только этой функции, если шаблон описан вне функции - он доступен любой функции программы. Установка шаблона не вызывает никаких действий в программе.
Структурные переменныеОбъявление структурных переменных приводит к выделению памяти для компонент структуры, куда можно записать данные или откуда можно прочитать их. Для объявления структурных переменных имеются несколько способов. 1. Установить структурный шаблон: struct sprav { Объявить простую переменную, массив структур, указатель на структуру: struct sprav tel1, tel2[5], *tel3; 2. Установить структурный шаблон с помощью макроопределения: #define SPRAV struct sprav Объявить переменные: SPRAV sp1, sp2[6], *sp3; 3. Объявить переменные одновременно с установкой шаблона (если на данную структуру вы больше не ссылаетесь): struct { 4. Ввести новый тип данных (TEL)-структура определенного вида: typedef struct { Объявить переменные нового типа: TEL tel1, tel2[6], *tel3; Если программа достаточно объемна, представляется более удобным четвертый способ.
Инициализация структурыИнициализировать можно только внешние или статические структуры. static struct { Доступ к компонентам структурыДоступ к компонентам структуры продемонстрируем с помощью примеров. Пример 1. /* Обращение к элементам структуры через имя переменной */ clrscr(); puts("введите фио абонента-");
Пример 2. /* Динамическое выделение памяти для структуры */ void main(void) clrscr();
Массив структурПример 3. /* Массив структур. Обращение к элементам структуры через */ void main(void) SPRAV tel[5]; /* массив структур - 5 элементов */ clrscr();
Пример 4. /* Массив структур. Память выделяется динамически. */ typedef struct{ void main(void) clrscr();
Передача структуры в функциюНепосредственный доступ к компонентам структуры - плохой стиль программирования. Все операции, которые разрешены применительно к структуре, должны быть при этом реализованы в виде отдельных функций. Не все компиляторы языка Си позволяют передавать структуры в функцию по значению, поэтому в примерах передача структуры идет через указатель. Пример 5. /* Передача структуры в функцию через указатель на структуру */ #include <stdio.h> /* Вычисление суммы двух комплексных чисел */ /* Ввод значений для элементов структуры */
Вложенные структурыСтруктура, являющаяся компонентом другой структуры, называется вложенной. Пример 6. /* Даны четыре точки - центры четырех окружностей. Заполнить структуру окружность, если все окружности проходят через начало координат. */ #include<conio.h> |