100
{{...},{…},…,{…}}; ,
где многоточия подразумевают строки. В первую очередь можно отметить, что
первая последовательность, заключенная в двойные кавычки, соответствует
первым парным скобкам и используется для инициализации первого указателя
символьной строки. Следующая последовательность в двойных кавычках
инициализирует второй указатель и так далее. Запятая разделяет соседние
последовательности.
Кроме того, мы можно явно задавать размер строк символов, используя
описание, подобное такому:
char poet[4][23];.
Разница заключается в том, что второй индекс задает «прямоугольный»
массив, в котором все «ряды» (строки) имеют одинаковую длину. Описание
сhar *poet[4];
однако, определяет «рваный» массив, где длина каждого «ряда» определяется той
строкой, которая этот «ряд» инициализировала. Рваный массив не тратит память
напрасно (рис. 2.31.1).
П о г и б п о э т !\0
\0\0\0\0\0\0 \0 \0 \0 \0\0
- н е в о л ь н и к ч е с т и - \0 \0 \0\0
П а л , \0 \0 \0 \0\0\0\0\0\0\0\0\0\0\0 \0 \0 \0 \0\0
о к л
в е т а н н ы й м о л в о й . . . \0
«Рваный» массив
П о г и б п о э т ! \0\0\0\0\0\0\0 \0 \0 \0 \0\0
- н е в о л ь н и к ч е с т и - \0 \0 \0\0
П а л , \0 \0 \0 \0\0\0\0\0\0\0\0\0\0\0 \0 \0 \0 \0\0
о к л
в е т а н н ы й м о л в о й . . . \0
Прямоугольный массив
Рис. 2.31.1
Указатели и строки
Большинство операций языка Си, имеющих дело со строками, работает с
указателями. Для размещения в оперативной памяти строки символов необходимо
предпринять следующие действия:
1) выделить блок оперативной памяти под массив;