[英]How does printf work?
我看了看但找不到合适的答案。
我想知道printf是如何工作的,如下所示:
char arr[2] = {5,6};
printf ("%d%d",arr[0],arr[1]);
我认为printf只是遍历格式,当它包含%d时,例如它从它的当前位置读取4个字节...但是这是错误的,因为上面的工作完美。
那么,我哪里错了?
你是对的。 但是有一个参数提升 ,它将你的char
:s转换为int
:s,当它们与printf()
这样的“varargs”函数一起使用时。
当你说:
printf ("%d%d",arr[0],arr[1]);
字符串和评估两个数组表达式的结果放在堆栈上并调用printf
。 printf
从堆栈中获取字符串,并使用其中的%formatters按顺序访问其他堆栈参数。 具体如何取决于实际的%值 - 例如, %d
读取4个字节,但%f
读取8个(对于大多数32位体系结构)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.