突然想测一测电脑数据在内存中存放模式是小端的还是大端的,而且感觉自己对指针的掌握已经独步天下......
于是乎,挥笔写下如下程序:
int main()
{
char a = 0;
char b = 0;
char c = 1;
char d = 0;
int * p = (int *)&d;
printf("%d\n", *p);
/*
printf("%d\n", &a);
printf("%d\n", &b);
printf("%d\n", &c);
printf("%d\n", &d);
*/
return 0;
}
咦?输出竟然不是256(小端)或者65536(大端)
在加入了注释的代码后,又神奇地正常显示256了!
什么鬼?难道printf还能改变变量的值不成?
a,b,c,d这四个变量不是在栈中连续排列的吗?地址不是应该连续的吗?为什么转为整型时出bug了?
反汇编看了一遍:
注释时是这样的:
0x0040134E mov BYTE PTR [esp+0x1f],0x0 //char a;
0x00401353 mov BYTE PTR [esp+0x1e],0x0 //char b;
0x00401358 mov BYTE PTR [esp+0x1d],0x1 //char c;
0x0040135D mo