1. 指向不同数据类型的指针之间不能互相转化!!!!

uint8_t *p1;
uint32_t
*p2;
p2
=(uint32_t*)pp1;

分析:

程序员希望将从p1单元开始的4个字节组成一个32位的整型来参与运算。

如果CPU允许各种数据对象存放在任意的存储单元,则以上转换没有问题。

但某些CPU对某些数据类型加强了对齐限制,要求这些对象占用一定的地址空间,比如某些字节寻址的CPU会

要求32位整型存放在4的整数倍地址上(就是所谓的address alignment地址对齐)。

在这个前提下,假设p1最初指向的是0x0003单元,则执行最后一行强制转换后,p2到底指向哪个单元就无法预料了。

posted on 2011-02-23 15:21  startup  阅读(579)  评论(0)    收藏  举报

导航