Учебное пособие: Структуры и объединения
struct A { B b;};
struct B { A a;};
Рассмотрим пример программы создающий такой список и выводящий его содержимое на консоль.
#include<stdio.h>
struct List
{
int dat;
List* next;
};
void main()
{
int i;
List *p, *heap = new List;
for (p=heap, i=0; i<10; i++){
p->dat=i;
p=p->next=new List;
}
for (p=heap, i=0; i<10; i++){
printf("%d",p->dat);
p=p->next;
}
}
Здесь мы описали два указателя: heap – для указания начала списка, p – для передвижения по списку; и простую переменную, как счетчик цикла. В отличие от массива, наш список будет "разбросан" по памяти, поскольку оператор new выделяет первые свободные блоки памяти, но это неважно, поскольку мы передвигаемся по списку, используя сохраненные в самом списке адреса:
p = p->next;.
Массивы структур
Рассмотрим программу, определяющую число вхождений каждого ключевого слова в текст Си-программы. Нам нужно уметь хранить ключевые слова в виде массива строк и счетчики ключевых слов в виде массива целых. Один из возможных вариантов - это иметь два параллельных массива:
char *keyword[NKEYS];
int keycount[NKEYS];
Однако именно тот факт, что они параллельны, подсказывает нам другую организацию хранения - через массив структур. Каждое ключевое слово можно описать парой характеристик
char *word;