我有以下结构:
struct foo
{
int a;
char b;
};
它存储在内存中,指向它的指针可以是未对齐的(奇数地址)。
那么,这安全吗?:
const struct foo a = *((struct foo*)char_ptr);
我很担心,因为源结构的整数成员可能位于奇数地址。在某些系统中,从奇数地址读取(多字节)整数会导致问题。
编辑:
为了避免关于使用的偏离主题的评论const
,我确实const
从代码中删除了 a 。(我从不将 const 指针转换为非 const 指针,即使在这种情况下它不应该引起任何问题)
更多关于问题的上下文:这种结构是协议框架的一部分。它可以在框架内的任何偏移处。在实际代码中,结构具有__attribute__((packed))
属性。但这可能不会改变答案?
无论如何,我可以使用memcopy
和非常量a
来解决问题。但我想使用 assingment,因为它似乎是更优雅的方式(如果它是安全的)。