Структуры данных. Хрестоматия по программированию на Си в Unix
Структуры данных.
Структуры ("записи") представляют собой агрегаты разнородных данных (полей разного типа); в отличие от массивов, где все элементы имеют один и тот же тип.
struct { int x, y; /* два целых поля */ char s[10]; /* и одно - для строки */ } s1;
Структурный тип может иметь имя:
struct XYS { int x, y; /* два целых поля */ char str[10]; /* и одно - для строки */ };
Здесь мы объявили тип, но не отвели ни одной переменной этого типа (хотя могли бы). Теперь опишем переменную этого типа и указатель на нее:
struct XYS s2, *sptr = &s2;
Доступ к полям структуры производится по имени поля (а не по индексу, как у массивов):
имя_структурной_переменной.имя_поля
указатель_на_структуру -> имя_поля
то есть
не а #define ВЕС 0 struct { int вес, рост; } x; #define РОСТ 1 x.рост = 175; int x[2]; x[РОСТ] = 175;
Например
s1.x = 13; strcpy(s2.str, "Finish"); sptr->y = 27;
Структура может содержать структуры другого типа в качестве полей:
struct XYS_Z { struct XYS xys; int z; } a1; a1.xys.x = 71; a1.z = 12;
Структура того же самого типа не может содержаться в качестве поля - рекурсивные определения запрещены. Зато нередко используются поля - ссылки на структуры такого же типа (или другого). Это позволяет организовывать списки структур:
struct node { int value; struct node *next; };
Очень часто используются массивы структур:
struct XYS array[20]; int i = 5, j; array[i].x = 12; j = array[i].x;
Статические структуры можно описывать с инициализацией, перечисляя значения их полей в {} через запятую:
extern struct node n2; struct node n1 = { 1, &n2 }, n2 = { 2, &n1 }, n3 = { 3, NULL };
В этом примере n2 описано предварительно для того, чтобы &n2 в строке инициализации n1 было определено.
Структуры одинакового типа можно присваивать целиком (что соответствует присваиванию каждого из полей):
struct XYS s1, s2; ... s2 = s1;
в отличие от массивов, которые присваивать целиком нельзя:
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий