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