Указатели во многом облегчают работу со строками. Строка – это одномерный массив символов. Поэтому указатель на строку эквивалентен имени этой строки и содержит адрес ее начального символа:
char *c_ptr;
char string[10] = “язык Си”;
c_ptr = string;
Более того, если строка задана как
string = “язык Си”;
то это будет эквивалентно оператору присваивания:
c_ptr = “язык Си”;
Мы присвоили указателю на данные символьного типа значение строковой константы. Другими словами, мы поместили в указатель адрес начального символа строки “язык Си”. Остальные символы этой строки будут расположены в последующих ячейках оперативной памяти.
Таким образом, любой указатель на данные символьного типа может рассматриваться как указатель на строку символов, которую можно задать оператором присваивания, ввести или вывести как обычную строку:
char *message;
message = “Славное море – священный Байкал!”;
puts(message);
printf(“\n%s”, message);
При таком задании строки нет необходимости рассчитывать число символов в ней и добавлять в ее конец нулевой символ‘\0’ – все это выполнится автоматически. Кроме того, сама строка не помещается в указатель: это невозможно сделать, так как указатель – это переменная. Указатель в этом случае будет только содержать адрес первого символа строки, записанной в неизвестной нам области оперативной памяти компьютера.
Массив указателей на строки позволяет задавать сразу несколько строк:
char *message[4];
message[0] = “Славное ” ;
message[1] = “море ” ;
message[2] = “- ” ;
message[3] = “священный Байкал!” ;
Элементами этого массива являются адреса первых символов строк. С ними можно работать как с элементами обычных символьных массивов, например выводить их на экран: