Записи 3.1.
struct S1 { char *s; struct S1 *s1p; }; | Тип записи S1 относится к записи, содержащей ссылку на символ s, и ссылку s1p на запись типа S1. |
static struct S1 a[] = { { "abcd", a+1 }, { "efgh", a+2 }, { 'ijkl", a } }; | Массив a из трех элементов, представляющих собой записи типа S1, определен как статический, поэтому в определении его можно инициировать. |
struct S1 *p[3]; | Выражение *(p[]), если оно встречается в операторе программы, относится к записи S1. Значит p[] - ссылка на запись S1 и p - массив из трех элементов, указывающих на записи типа S1. |
На рис.3.1 изображены массивы a и p.
![]() Рис.3.1. |
Записи 3.2.
for (i=0; i | i принимает значения 0, 1, 2. |
p[i] = a[i].s1p; | В i-й элемент p копируется ссылка из элемента s1p записи, которая есть i-й элемент a (рис.3.2-1). |
![]() Рис.3.2-1 |
![]() Рис.3.2-2 |
Записи 3.3.
swap(*p,a); | Так как p указывает на p[0], то *p относится к содержимому p[0] или &a[1], а дает &a[0]. |
temp=(&a[1])->s | Эквивалентно temp=a[1].s. |
(&a[1])->s=(&a[0])->s | Или a[1].s=a[0].s. |
(&a[0])->s=temp | Функция swap меняет местами строки, на которые указывают элементы s ее аргументов (рис. 3.3-1). |
![]() Рис.3.3-1 |
![]() Рис.3.3-2 |
![]() Рис.3.3-3 |
Записи 3.4.
swap(p[0],p[0]->s1p); | Элемент p[0] содержит &a[1], (p[0])->s1p содержит &a[2] (рис.3.4-1). |
![]() Рис.3.4-1 |
Рис.3.4-2
Рис.3.4-3
Рис.3.4-4