- 有这么一道笔试题:
- struct data
- {
- int a;
- short s;
- };
- int main()
- {
- struct data d;
- d.s=0x0102;
- char *p=&d
- printf("%d"(int)(*(p+4)));
- }
栈是由高地址向低地址增长,加入cout<<&d<<endl<<&d.a<<endl<<&d.s<<endl测试,
输出结果:0x001FF808
0x001FF808
0x001FF80C
说明结构体内,定义顺序从上到下对应地址从低到高, a是从0x001FF808开始存储,s是从0x001FF80C开始存储,但是要注意:a和s都是低位存到低地址,高位存到高地址,
p+4时移动到0x001FF80C,也就是s的低位,应该是2,而不是0
附:
int endian( void )
{
union
{
int i;
char a;
}e;
e.i=1;
return e.a==1;
}
如果系统是小端则返回1,大端返回0;