allen998 发表于 2013-4-23 15:02

问题请教:获得结构体内成员的偏移量

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出错,丢失了高位字节,为什么?
       
        /* 只要通过变量运算取得便宜地址的方式,取到的地址数据就会丢失高位字节,为什么? 有什么方法可以解决? */
       
}

jesseli 发表于 2013-4-23 18:28

你的结构体数组访问越界了。

addr = (uint)(&((struct CFG *)0)->c);      // 结果:addr = 0x001F正确
-------------------------------------------------------
-> addr = (uint)(&((struct CFG *)0)->c);
页: [1]
查看完整版本: 问题请教:获得结构体内成员的偏移量