Результат работы

отдохнешь и ты.

Явное задание размера памяти.При объявлении массива можно указать: char ml[36] = "В полдневный жар в долине Дагестана"; вместо

char ml[ ] = "В полдневный жар в долине Дагестана"; . Число элементов по крайней мере на один нулевой символ больше, чем длина строки. Как и в других статических или внешних массивах, любые неиспользованные элементы автоматически инициализируются нулем (который в символьном виде является нулевым байтом '', а не символом цифры нуль).

Массивы символьных строк

Обычно бывает удобно иметь массив символьных строк. В этом случае можно использовать индекс для доступа к нескольким разным строкам [14].

char *poet[4] = {"Погиб поэт!", " - невольник чести - ",

"Пал," , " оклеветанный молвой..."};

Можно сказать, что poet является массивом, состоящим из четырех указателей на символьные строки. Каждая строка символов представляет собой символьный массив, потому имеется четыре указателя на массивы. Первым указателем является poet[0], и он ссылается на первую строку. Второй указатель poet[] ссылается на вторую строку. Каждый указатель, в частности, ссылается на первый символ своей строки:


*poet[0] ==TT, *poet[l] ==", *poet[2] =='П' и т.д.

Инициализация выполняется по правилам, определенным для массивов. Тексты в кавычках эквивалентны скобочной записи

{{...},{...},...,{...}}; , где многоточия подразумевают строки. В первую очередь можно отметить, что первая последовательность, заключенная в двойные кавычки, соответствует первым парным скобкам и используется для инициализации первого указателя символьной строки. Следующая последовательность в двойных кавычках инициализирует второй указатель и так далее. Запятая разделяет соседние последовательности.

Кроме того, мы можно явно задавать размер строк символов, используя описание, подобное такому:

charpoet[4][23]; . Разница заключается в том, что второй индекс задает «прямоугольный» массив, в котором все «ряды» (строки) имеют одинаковую длину. Описание

char *poet[4]; однако, определяет «рваный» массив, где длина каждого «ряда» определяется той строкой, которая этот «ряд» инициализировала. Рваный массив не тратит память напрасно (рис. 1.15).

 

 

 

 

 

 

 

 

 

 

  «РВАНЫЙ» МАССИВ  
  п о г и б   п о э т Х0Н44444444М  
-   н е в о л ь н и к   ч е с т и   - Х0НМ  
п а л i о                                
о к л е в е т а н н ы й   м о л в о и о  
  ПРЯМОУ1 ГОЛЬНЫЙМАС СИВ  
  п о г и б   п о э т I о о о о о о о о о о о о  
-   н е в о л ь н и к   ч е с т и   - о о о о
п а л i о о о о о о о о о о о о о о о о о о о
о к л е в е т а н н ы и   м о л в о и о
     

Рис. 1.15 85


Указатели и строки

Большинство операций языка Си, имеющих дело со строками, работает с указателями. Для размещения в оперативной памяти строки символов необходимо предпринять следующие действия:

1) выделить блок оперативной памяти под массив;

2) осуществить ввод строки по адресу массива, используя специальную функцию ввода информации.