假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
1
2
3
4
5
6
|
#include <stdio.h>
int
main(){
long
long
a = 1, b = 2, c = 3;
printf
(
"%d %d %d\n"
, a, b, c);
return
0;
}
|
正确答案: B 你的答案: A (错误)
1,2,3
1,0,2
1,3,2
3,2,1
printf函数的原型是printf(const char*,...);
第二个参数是任意个数目的参数,所以printf函数不是分个把参数入栈,而是一股脑全部压入堆栈,因此对于8字节的数据来说,堆栈中的数据是1000 0000 2000 0000 3000 0000,%d按四字节输出,因此,第一个%d输出1,第二个%d输出0,第三个%d输出2。
如果改成printf("%d ", a);printf("%d ", b);printf("%d\n", c);那结果就是1,2,3.