Я читаю главу о массивах и указателях в Кернигане и Ричи. Язык программирования C.
Они приводят пример:
/* strlen: return length of string s */
int strlen(char *s)
{
int n;
for (n = 0; *s != '\0'; s++)
n++;
return n;
}
И затем скажите:
"Так как s
является указателем, то приращение его совершенно законно; s++
не влияет на символьную строку в функции, которая называется strlen
, а просто увеличивает приращение частной копии указателя strlens. звонки вроде
strlen("hello, world"); /* string constant */
strlen(array); /* char array[100]; */
strlen(ptr); /* char *ptr; */
все работают. "
Мне кажется, что я понимаю все это, кроме первого примера вызова: почему, или как, является строковым литералом "hello, world"
, рассматриваемым как char *s
? Как это указатель? Назначает ли функция этот строковый литерал как значение его локальной переменной *s
, а затем использует s
как имя/указатель массива?