如下做了测试,用sizeof计算大小,发现:
1、空结构体t1、空数组t3、最后一个元素为空数组的结构体t2的大小均为0
2、用malloc给t2申请内存多申请一些,可以使用数组下标的方式给多申请内存部分赋值,详细如下。
3、sizeof(*结构体指针),值与该结构体的大小相同,等于sizeof(结构体类型)。
4、关于结构体最后一个元素设置为空数组的作用https://blog.csdn.net/whl0071/article/details/125167109 ,大概理解就是减少内存申请和释放操作,这样可以不用固定数组大小,也不用单独管理(若为指针会占内存且需单独管理)。
突然想起来之前面试见过问这个的,就查了下,但是查的结果(说是空结构体是1?)和实际测试的结果不一样,也不知道是哪里出了问题...
#include <stdio.h>
#include <stdlib.h>

struct T1
{      }t1;
struct T2
{     char a[0];
}t2;
int t3[0];
struct T4
{     int a;     int b[0];
};

int main()
{     struct T4 *pt4;          printf("sizeof(T1)=%d, sizeof(t1)=%d\n", sizeof(struct T1), sizeof(t1));     printf("sizeof(T2)=%d, sizeof(t2)=%d\n", sizeof(struct T2), sizeof(t2));     printf("sizeof(t3)=%d\n", sizeof(t3));     printf("sizeof(T4)=%d, sizeof(pt4)=%d\n", sizeof(struct T4), sizeof(pt4));          pt4 = (struct T4 *)malloc(sizeof(struct T4) + 3*sizeof(int));     printf("sizeof(T4)=%d, sizeof(*pt4)=%d\n", sizeof(struct T4), sizeof(*pt4));     pt4->b[1] = 3;     printf("pt4->b[1]=%d\n", pt4->b[1]);     free(pt4);          return 0;
}