Как работает printf? - PullRequest
       6

Как работает printf?

6 голосов
/ 04 февраля 2010

Я посмотрел, но не смог найти достойного ответа.

Мне было интересно, как работает printf в таком случае:

char arr[2] = {5,6};

printf ("%d%d",arr[0],arr[1]);

Я думал, что printf просто просматривает формат, и когда он принимает, например,% d, он читает 4 байта из текущей позиции ... однако это должно быть неправильное представление, потому что вышеописанное работает отлично.

так, где я не прав?

Ответы [ 2 ]

9 голосов
/ 04 февраля 2010

Ты прав.Но есть продвижение аргумента , которое преобразует (среди прочего) ваши char: s в int: s, когда они используются с функцией "varargs", такой как printf().

1 голос
/ 04 февраля 2010

Когда вы говорите:

 printf ("%d%d",arr[0],arr[1]);

строка и результат вычисления двух выражений массива помещаются в стек и вызывается printf.printf берет строку из стека и использует в ней% форматтеров для последовательного доступа к другим сложенным аргументам.Как именно это происходит, зависит, как вы говорите, от фактического значения% - например, %d читает 4 байта, а %f читает 8 (для большинства 32-битных архитектур).

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