打印

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

[复制链接]
1173|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

粉丝