Я просмотрел, но не мог найти достойный ответ.
Я задавался вопросом, как printf работает в случае, если как это:
char arr[2] = {5,6};
printf ("%d%d",arr[0],arr[1]);
Я думал, что printf просто идет через формат и когда это, encouter %d, например, он читает 4 байта из этого, является текущей позицией... однако, это, должна быть причина misconcepition это выше работ отлично.
таким образом, где я неправильно?
Вы правы. Но есть продвижение аргумента , которое преобразует (среди прочего) ваш char
: s в int
: s, когда они используются с функцией «varargs», например ] printf ()
.
Когда вы говорите:
printf ("%d%d",arr[0],arr[1]);
строка и результат вычисления двух выражений массива помещаются в стек, а printf
- называется. printf
берет строку из стека и использует в ней средства форматирования% для последовательного доступа к другим аргументам в стеке. Как именно это происходит, зависит, как вы говорите, от фактического значения% - например, % d
читает 4 байта, а % f
читает 8 (для большинства 32-битных архитектур).