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

[复制链接]
1563|1
 楼主| allen998 发表于 2013-4-23 15:02 | 显示全部楼层 |阅读模式
struct CFG
{
        uchar a;
        uchar b;
        uchar c[10][50];
};


void main( void )
{
        uchar i, s;
        uint addr;
       
        i=0;
        s=30;
       
        addr = (uint)(&((struct CFG *)0)->c[10][30]);        // 结果:addr = 0x001F  正确
        addr = (uint)(&((struct CFG *)0)->c[i][s]);                // 结果:addr = 0x001F  正确
       
       
        i=10;
        s=30;
        addr = (uint)(&((struct CFG *)0)->c[10][30]);        // 结果:addr = 0x012D  正确
        addr = (uint)(&((struct CFG *)0)->c[i][s]);                // 结果:addr = 0x002D  出错,丢失了高位字节,为什么?
       
        /* 只要通过变量运算取得便宜地址的方式,取到的地址数据就会丢失高位字节,为什么? 有什么方法可以解决? */
       
}
jesseli 发表于 2013-4-23 18:28 | 显示全部楼层
你的结构体数组访问越界了。

addr = (uint)(&((struct CFG *)0)->c[10][30]);        // 结果:addr = 0x001F  正确
-------------------------------------------------------
-> addr = (uint)(&((struct CFG *)0)->c[9][29]);  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部