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
值表明0x0301
与0x70820000
的“意外”垃圾值一起按预期存储。关于c++ - 解引用中的指针查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24142718/