разница между char * и int * в C при использовании с printf - PullRequest
0 голосов
/ 17 марта 2012

Это может быть очень простой вопрос, но я не могу его понять.Мне нужно четкое понимание, поэтому я пишу здесь.

Рассмотрим код:

char *c = "hello";
int   a = 10;
int  *b = &a;
printf("%s\t%d\n", c, *b);

Почему я должен передать *b, чтобы получить значение для печати, но в случае строкесли я просто дам c printf все еще печатает "привет"?

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Потому что так определяется printf.

Но это имеет смысл;рассмотрим следующий код:

printf("%d\n", 42);

Каким будет эквивалентный код, если printf принимает целые числа через указатель?

Строки являются особым случаем;строка в C - это последовательность символов в памяти, доступ к которой осуществляется через указатель на ее первый элемент.Таким образом, вам нужно дать printf этот указатель, чтобы он мог прочитать всю строку.

3 голосов
/ 17 марта 2012

Вот что означают спецификаторы:

  • %s хочет указатель на символ, поэтому вам не нужно разыменовывать его, printf будет
  • %d хочет получить истинное целое число, поэтому вы делаете должны разыменовать его

Это именно то, чем printf является и всегда было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...