明明我已经设置了4字节对齐,请问为什么结构体会按照对齐属性读取数据,此时数据发生错乱呢

明明我已经设置了4字节对齐,请问为什么结构体会按照对齐属性读取数据,此时数据发生错乱呢。

img

str3=(str*)arr;这句话是把arr[0]赋给num1,arr[1]赋给num2
arr[3],arr[4]整体赋给num3
44=0x002c,55=0x0037
那么num3等于0x0037002c 换成10进制就是3604524

由于你结构体前两个参数是short int 为2字节,后一个参数为int 4字节,默认会将前两个参数与后一个参数进行4字节对齐;
你换一下参数,比如先定义int型,再定义2个short int型。