在C和指针中访问内存算术混淆

时间:2016-07-22 02:43:08

标签: c pointers struct

我对代码中发生的事情感到困惑,我不明白为什么。

我有一个来自某些硬件的内存缓冲区给我。我想通过在内存顶部放置一个结构来将自己偏移到内存中,这样我就可以简单地访问结构。但是有些数据只是整数的标题,所以我正在做以下几点:

如果我执行以下操作,原始数据为void *,以及数据进入的位置:

uint32_t * data = (uint32_t * ) raw_data;

如果我尝试通过*数据访问它,我会得到垃圾值。

现在,如果我定义如下的结构:

typedef struct incoming_data __attribute__((__packed__))
{
   uint32_t dat;
} incoming_data

并通过以下方式访问它:

incoming_data * data = (incoming_data *) raw_data;

然后通过data-> dat访问它我得到正确的值!

我检查了上面两个指针相同的地址。有人可以解释我做错了什么。

提前致谢。

0 个答案:

没有答案
相关问题