我在Linux下写了个小程序:
int main(void)
{
unsigned char src[] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99
};
unsigned char *p, *q;
int a, b;
p = src+1;
a = *(int *)p;
q = src+2;
b = *(int *)q;
return 0;
}
调试时查看a,b的值:
a=0x44332211
b=0x55443322
这是我所期望的结果。但我把同样的程序放到CCS3.3中编译,却得到如下结果:
a=0x33221100
b=0x33221100
a和b的结果竟然一样,而且其最低位的地址都是从src[0]的地址开始的!我再看了一下,p,q倒是得到了正确的地址,但最后得到的a,b的值却不对,似乎CCS强制使用了4字节的对齐,而不能像Linux或者其他环境下的编译器那样从任意位置开始解引用。
我想问问这是什么原因造成的,如果我要在CCS下实现象在Linux下那样的效果,又应该怎么做?