Понятие структуры
Очень часто при обработке информации приходится работать с блоками данных, в которых присутствуют данные разных типов. Например, информация о книге в каталоге библиотеки включает в себя автора, название книги, год издания, количество страниц и т.п.
Для хранения этой информации в памяти не подходит обычный массив, так как в массиве все элементы должны быть одного типа. Конечно, можно использовать несколько массивов разных типов, но это не совсем удобно.
В современных языках программирования существует особый тип данных, который может включать в себя несколько элементов более простых (причем разных!) типов.
Структура -это тип данных, который может включать в себя несколько полей– элементов разных типов (в том числе и другие структуры).
В общем случае при работе со структурами следует выделить четыре момента:
- объявление и определение типа структуры,
- объявление структурной переменной,
- инициализация структурной переменной,
- использование структурной переменной.
Данные типа структура, как и массивы, относятся к сложным структурам данных. Структура состоит из фиксированного числа элементов, называемых полями. Однако, в отличие от массива, поля могут быть различного типа. Например, структурой можно считать строку экзаменационной ведомости:
Андреева С.В. 4 5 5
Данная структура состоит из четырех полей: одно поле - строка (ФИО студента) и три числовых поля (оценки студента по предметам).
Поскольку структура - это новый тип данных, его надо предварительно объявить в начале программы. Определение типа структуры делается так:
struct Имя
{
<тип> <имя 1-го поля>;
<тип> <имя 2-го поля>;
…………
<тип> <имя последнего поля>;
};
Например, задание типа записи строки экзаменационной ведомости выглядит следующим образом:
struct student
{
char fam[20];
int mathematics, informatics, history;
};
Тогда при описании переменных можно использовать этот тип:
struct student X;
Здесь X - переменная типа структура; struct student - тип; fam, mathematics, informatics, history - поля структуры.
Отметим, что определение типа структуры может быть задано в программе на внешнем уровне, при этом имя пользовательского типа имеет глобальную видимость (при этом память не выделяется). Определение типа структуры также может быть сделано внутри функции, тогда имя типа структуры имеет локальную видимость.
Чтобы упростить обращение к структурному типу, можно воспользоваться директивой #define.
Например, для предыдущей структуры:
#define stud struct student
stud
{
char fam[20];
int mathematics, informatics, history;
};
Теперь идентификатор stud заменит в любом месте программы громоздкий тип struct student.
Теперь описании переменной типа структура будет выглядеть так:
stud X;
В более поздних версиях языка С ключевое слово typedef позволяет в программе создать синоним типа, который удобно использовать для объявления переменных структурного типа. Например:
typedef struct student
{
char fam[20];
int mathematics, informatics, history;
} STUD;
Идентификатор STUD представляет собой синоним типа struct student. С помощью синонима STUD можно объявить переменную:
STUD X;
Для обращения к отдельным полям переменной типа структура используется составное имя:
<имя переменной>.<имя поля>
Например, для переменной X обращения к полям записываются следующим образом:
X.fam, X. mathematics, X. informatics, X. history.
При размещении в памяти структурной переменной можно выполнить ее инициализацию. Неявная инициализация производится для глобальных переменных, переменных класса static. Структурную переменную можно инициализировать явно при объявлении, формируя список инициализации в виде константных выражений.
Формат: struct Имя переменная ={значение1, … значениеN};
Внутри фигурных скобок указываются значения полей структуры, например:
struct student X={"Андреева С.В.", 4, 5, 5};
при этом первое значение записывается в первое поле, второе значение – во второе поле и т. д., а сами значения должны иметь тип, совместимый с типом поля.
Дата добавления: 2015-02-10; просмотров: 606;