struct S1 { char *s; int i; struct S1 *s1p; }; | Тип записи S1 относится к записи, содержащей ссылку на символ s, целое i и ссылку s1p на запись типа S1. Но это только описание, никакого экземпляра записи типа S1 не определяется. |
static struct S1 a[] = { { "abcd", 1, a+1 }, { "efgh", 2, a+2 }, { 'ijkl", 3, a } }; | Здесь a - массив из трех элементов типа S1, т.е. записей S1. Поскольку a определялся как static, то его можно инициировать в самом определении. |
struct S1 *p = a; | Переменная p описывается как ссылка на запись S1 и инициируется значением, указывающим на первый элемент a. |
На рис.2.1 изображены массив a и ссылка p.
Рис.2.1 |
PRINT3(s, | Должны быть отпечатаны строки. |
a[0].s | Это строка, на которую указывает элемент s записи, являющейся первым элементом массива a (рис.2.2-1). |
Рис.2.2-1 |
Рис.2.2-2
Рис.2.2-3
for (i=0; i | Переменная i принимает значения 0 и 1. |
PR(d, | Нужно напечатать некоторое целое. |
--((a[i]).i) | Операция уменьшения применяется к целому, хранящемуся в элементе i записи, которая есть i-й элемент a. (На рис.2.3-1 показан случай для i=0.) |
Рис.2.3-1 |
Рис.2.3-2
++(p->s) | Увеличивается элемент s записи, на которую указывает p, затем печатается строка, на которую указывает этот элемент (рис.2.4-1). |
Рис.2.4-1 |
Рис.2.4-2
Рис.2.4-3