结构体的指针的对齐问题
定义了一个指向结构体的指针,通过指针指向结构体成员的方式取成员的时候需要考虑编译器对齐的问题吗?是不是可能因为编译器对齐产生填充而取到其他不期望的值?谢谢
定义了一个指向结构体的指针,通过指针指向结构体成员的方式取成员的时候需要考虑编译器对齐的问题吗?是不是可能因为编译器对齐产生填充而取到其他不期望的值?谢谢
struct MyStru *p;
... ... ...
p->member_a= 1;
这样的时候好像不用考虑对齐,但是
char *p;
struct MyStru sss;
p= (char *)&sss;
*(p+3)= 2;
这样的时候大概就得考虑对齐的问题了。
up
如果直接操作结构体成员是不会取到不期望的值
但是对于要求连续数据格式的时候需要考虑对齐的问题
例如通讯中的数据帧格式等
你可以使用
#pragma pack(1)
struct tagStruct
{
...
}
t;
#pragma pack()
的方式来强制连续存放
其中前面 pack(1) 是指对齐边界为 1