typedef unsigned char uint8_t;
typedef int uint32_t;

uint8_t Local_Buffer[2] = {1,3};

uint32_t d_buffer;

d_buffer = ( *(uint32_t *)Local_Buffer );


d_buffer的内容到底是什么?打印d_buffer的值后,我得到0x70820301。所以它是一个地址。

最佳答案

您正在设置一个2字节的本地缓冲区,其值为1、3,如下所示:

|0x01|0x03|


然后,您将该值(使用C样式转换)转换为指向uint32_t的指针,对其进行解引用并存储结果。 uint32_t的大小为4个字节。

从逻辑上讲,您似乎在使d_buffer具有某些值,例如:

|0x01|0x03|?|?


实际上,此强制转换会读取数组的末尾,因此会引起未定义的行为,因此实际上任何事情都可能发生。

在您的特定情况下,看来您正在用期望值(0x03,0x01)以及来自相邻内存地址的其他两个“随机”值填充d_buffer

体系结构的endianness将告诉您如何存储各个字节以构成uint32_t值的值。您的0x70820301值表明0x03010x70820000的“意外”垃圾值一起按预期存储。

关于c++ - 解引用中的指针查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24142718/

10-10 18:22