|
这个我知道, 但很多32位处理器要求必须4字节对齐
uint8_t *pl;
uint32_t *p2;
p2=(uint32_t*)pl;
/*注:uint8_t表示8位无符号整型,uint3_t表示32位无符号整型。*/
程序员希望将从p1单元开始的4个字节组成一个32付的整型来参与运算。
如果CPU允许各种数据对象存放在任意的存储单元,则以上转换没有问题。但某些CPU对某种(些)数据类型加强了对齐限制,要求这些数据对象占用一定的地址空间,比如某些字节寻址的CPU会要求32位(4字节)整型存放在4的整倍数地址上。在这个前提下.思考程序中的指针转换:假设pl一开始指向的是 0x00O3单元(对uint8_t型的整型没有对齐要求),则执行最后一行强制转换后,p2到底指向哪个单元就无法预料了。 |
|