【C++知识点】关于32位数字小端方式存储的问题
假设在一个 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.