问题请教:获得结构体内成员的偏移量
struct CFG{
uchar a;
uchar b;
uchar c;
};
void main( void )
{
uchar i, s;
uint addr;
i=0;
s=30;
addr = (uint)(&((struct CFG *)0)->c); // 结果:addr = 0x001F正确
addr = (uint)(&((struct CFG *)0)->c); // 结果:addr = 0x001F正确
i=10;
s=30;
addr = (uint)(&((struct CFG *)0)->c); // 结果:addr = 0x012D正确
addr = (uint)(&((struct CFG *)0)->c); // 结果:addr = 0x002D出错,丢失了高位字节,为什么?
/* 只要通过变量运算取得便宜地址的方式,取到的地址数据就会丢失高位字节,为什么? 有什么方法可以解决? */
} 你的结构体数组访问越界了。
addr = (uint)(&((struct CFG *)0)->c); // 结果:addr = 0x001F正确
-------------------------------------------------------
-> addr = (uint)(&((struct CFG *)0)->c);
页:
[1]