1.unsigned char和unsigned short两种类型的变量字节大小跟机器类型无关,分别占1B,2B,但unsigned long类型的变量字节大小与机器类型有关,等于机器字长;为了加快CPU执行效率,结构体会有字节填充,填充标准:依据结构体的最大字节大小的成员,填充后的结构体字节大小应该为最大字节成员所占字节的最小整数倍;sizeof运算结构体会得到按照填充规则填充后的结构体大小,sizeof运算填充后的结构体成员依然会得到那个成员原本的字节大小;以64位系统为例: 有结构体嵌套的情况,举例:
2.当使用memcpy()和sizeof运算符整体操作结构体时,要密切注意结构体字节填充对赋值或复制数据的影响,举例: 3. 结合上面描述,结构体整体赋值或操作,很容易带来数据错乱,因此不建议整体操作结构体,推荐直接操作结构体成员变量比较靠谱,举例: 或者在结构体定义时,故意添加一些无意义的变量或Reserved变量,以满足已经字节填充好的标准。