1、问题
1)、结构体大小
结构体成员的内存分配满足下面三个条件
2 结构体第一个成员的地址和结构体的首地址相同
3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节
4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节
2)、成员变量位置距离结构开始存储的位置偏移字节
我们用offsetof函数
2、测试Demo
#include <stdio.h>
#include <stddef.h>#define PRODUCT_SIZE 20struct A
{int a;char b;char d;
};struct AA
{char a;int b;char c;
};struct B
{char a;double b;char c;char d[9];int e;
};typedef struct
{char product[PRODUCT_SIZE];int qunatity;float unit_price;float total_amount;char s;
} Transaction;struct C
{int a;char b;short c;double d;int f;
};int main()
{printf("float size is %d\n", sizeof(float));printf("short size is %d\n", sizeof(short));printf("long size is