Информатика и технология программирования


Строки, массивы символов и указатели char*


Напомним, что базовый тип данных char понимается в Си двояко: как байт и как символ. Поэтому для указателя с типом указуемой переменной char (указатель на char ) допускаются различные интерпретации:



-указатель на отдельный байт;



-указатель на область памяти -массив байтов;



-указатель на отдельный символ;



-указатель на массив символов.

Какая из них в действительности имеет место -зависит от программы, транслятор здесь не накладывает ограничений. Тем не менее, по сложившейся традиции будем считать, что указатель на char ссылается на массив символов. А поскольку стандартным содержимым массива символов является строка - последовательность символов, ограниченная символом с кодом 0, то такой указатель логично назвать УКАЗАТЕЛЕМ НА СТРОКУ. Использование его в программе при работе со строками предпочтительнее в сравнении с массивом символов уже потому, что размерность массива символов фиксирована, а размерность памяти, адресуемой указателем, ограничивается внешними факторами. Таким образом, он является более естественным средством для представления строки.


int strlen(char *p) // Возвращает длину строки, заданной


{ // указателем на на строку char*


int n;
for (n=0; *p != '\0'; p++);
return n;
}
void strcat(char *dst, char *src)
{ // Объединяет строки,


while (*dst !='\0') dst++; // заданные указателями


for (; *src !='\0'; *dst++ = *src++);
*dst = '\0';
}

Несколько замечаний необходимо сделать о СТРОКОВЫХ КОНСТАНТАХ. Строковая константа представляет собой последовательность символов, заключенных в двойные кавычки (например "abcd"). Для строковой константы транслятор в любом контексте программы выполняет следующие действия:



-создает массив символов с размерностью, достаточной для размещения строки;



-инициализирует (заполняет) массив символами строки, дополняя символом '\0';



-в контекст программы, где присутствует строковая константа, включает указатель на созданный массив символов. Таким образом в программе ей соответствует тип char* -указатель на строку.




Начало  Назад  Вперед



Книжный магазин