看看如下代码,猜猜会打印出什么?
int i=1;
printf("%d %d\n",i++,i++);
输出结果竟然是:
2 1
是不是感到很奇怪?
原因:printf是最右侧的元素先入栈,所以右边的i++中的i先入站占4个字节此时入栈元素为0x00000001,接下来左边的这个i++中的i入栈,此时i已经变成了2(0x00000002)。由于x86是小端存储,所以栈中的情况是这样的:
栈顶 02 00 00 00 01 00 00 00 栈底
输出时从栈顶弹出:先弹出2,再弹出1。
打完收工。