Задачи по языку С


         

Пояснения:


Ссылки и массивы 4.1.

char *c[] = { "ENTER", "NEW", "POINT" "FIRST" }; Описатель *c[] приводится к символу, значит, c[] указывает на символ и c - массив ссылок на символ. Элементы инициируются так, что они указывают на массивы символов "ENTER", "NEW", "POINT" и "FIRST".
char **cp[] = { c+3, c+2, c+1, c }; Описатель **cp[] соответствует символу, *cp - ссылке на символ и cp[] - ссылке на ссылку на символ. Элементы cp инициируются так, что они указывают на элементы c.
char ***cpp = cp; Описатель ***cpp дает символ, **cpp - ссылку на символ, наконец, *cpp - ссылка, указывающая на ссылку на ссылку на символ.

Рис 4.1 показывает взаимосвязь между cpp, cp и c.


Рис.4.1

Ссылки и массивы 4.2.

*(*(++cpp)) Увеличим cpp, а затем проследим цепочку ссылок (рис.4.2-1).
(*(--(*(++cpp))))+3 Увеличим cpp, по ссылке дойдем до cp[2], уменьшим cp[2], по ссылке дойдем до c[0] и эту ссылку проиндексируем значением 3 (рис.4.2-2).
(*(cpp[(-2)]))+3 Индексируя cpp значением -2, получим cp[0], по ссылке дойдем до c[3] и проиндексируем его значением 3 (рис.4.2-3).
((cpp[-1])[-1])+1 Индексируя cpp значением -1, получим cp[1], снова индексируем c -1 и доходим до c[1], эту последнюю ссылку индексируем значением 1 (рис.4.2-4).

О ссылках. Если вы правильно решили последнюю задачу, то знаете все, что нужно знать о механизме использования ссылок. Сила ссылок заключается в их универсальности: ссылки можно связывать друг с другом, получая бесконечно разнообразные сложные структуры данных. Но опасность ссылок как раз и заключается в их силе: сложные цепочки ссылок редко бывают понятными и еще реже верными.


Рис.4.2-1

Рис.4.2-2

Рис.4.2-3

Рис.4.2-4




Содержание  Назад