小编The*_*eer的帖子

使用指针访问未对齐的结构成员

我有以下结构:

typedef struct __attribute__ ((__packed__))
{
    uint16_t a;
    uint32_t b;
} st_t;
Run Code Online (Sandbox Code Playgroud)

->“b”成员未对齐。

当我执行以下操作时,gcc 会发出警告:

st_t st;
uint32_t * b_p = &st.b;
*b_p = 0;
Run Code Online (Sandbox Code Playgroud)

警告日志:

taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value
Run Code Online (Sandbox Code Playgroud)

但是当我执行以下操作时,它不会发出任何警告:

st_t st;
st_t * st_p = &st;
st_p->b = 0;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在第二种情况下它不会发出警告,因为我仍在访问未对齐的成员。

c memory struct pointers alignment

6
推荐指数
1
解决办法
1027
查看次数

标签 统计

alignment ×1

c ×1

memory ×1

pointers ×1

struct ×1