printf如何工作?

时间:2010-02-04 10:27:19

标签: c memory printf

我看了看但找不到合适的答案。

我想知道printf是如何工作的,如下所示:

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

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

我认为printf只是遍历格式,当它包含%d时,例如它从它的当前位置读取4个字节...但是这是错误的,因为上面的效果非常好。

所以,我错在哪里?

2 个答案:

答案 0 :(得分:9)

你是对的。但argument promotionchar:s转换为int:s,当它们与printf()等“varargs”函数一起使用时,{{3}}会转换为{{3}}。

答案 1 :(得分:1)

当你说:

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

字符串和评估两个数组表达式的结果放在堆栈上并调用printfprintf从堆栈中获取字符串,并使用其中的%formatters按顺序访问其他堆栈参数。具体如何取决于实际的%值,例如,%d读取4个字节,%f读取8个(对于大多数32位体系结构)。