【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

【C++知识点】关于32位数字小端方式存储的问题【C++知识点】关于32位数字小端方式存储的问题

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.