您的位置:首页 > 其它

小端系统地址访问

2014-09-20 16:00 120 查看
有这么一道笔试题:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: