Результат работы
Результат работы
Подожди немного, отдохнешь и ты.
В случае с указателем можно использовать операцию приращения на единицу.
while( ^reason != '\0' ) /^Останов в конце строки.*/
{
putchar( *(reason++) );
}
/^Печать символа*/
/*и перемещение указателя.*/
отдохнешь и ты.
Явное задание размера памяти.При объявлении массива можно указать: char ml[36] = "В полдневный жар в долине Дагестана"; вместо
char ml[ ] = "В полдневный жар в долине Дагестана"; . Число элементов по крайней мере на один нулевой символ больше, чем длина строки. Как и в других статических или внешних массивах, любые неиспользованные элементы автоматически инициализируются нулем (который в символьном виде является нулевым байтом '\0', а не символом цифры нуль).
Массивы символьных строк
Обычно бывает удобно иметь массив символьных строк. В этом случае можно использовать индекс для доступа к нескольким разным строкам [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) осуществить ввод строки по адресу массива, используя специальную функцию ввода информации.