Указатели и строковые литералы в C - PullRequest
0 голосов
/ 03 марта 2020

Предположим, на C языке у меня есть следующий код, где переменная-указатель "word" указывает на строковый литерал.

const char * word = "HELLO";

Почему это работает -

printf("\nword[1]:  '%c'", word[1]);
printf("\nword[2]:  '%c'", word[2]);

а это не так?

printf("\nAddress of word[1]:  %p", word[1]);
printf("\nAddress of word[2]:  %p", word[2]);

1 Ответ

3 голосов
/ 03 марта 2020

, потому что последний является символом, а не указателем. word[1] совпадает с *(word + 1), и вы просто разыменовываете указатель на символ. Результат: char

вам необходимо:

printf("\nAddress of word[1]:  %p", (void *)&word[1]);
printf("\nAddress of word[2]:  %p", (void *)&word[2]);

или

printf("\nAddress of word[1]:  %p", (void *)(word + 1));
printf("\nAddress of word[2]:  %p", (void *)(word + 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...