举例说明
比如,要求定义一个用于存储char型数据的10字节空间。
使用三种不同的办法来定义:结构体A使用0长度数组,结构体B使用定长数组,结构体C使用指针。
//结构体定义
struct A{
char content[0];
} ;
struct B{
char content[10];
};
struct C{
char* content;
};
//创建符合要求的变量
struct A* s1 = (struct A*)malloc(10); // A
struct B s2; // B
struct C* s3 = (struct C*)malloc(sizeof(struct C)); // C
s3.content = (char*) malloc(10);
//释放资源
free(s1); // 对应A
// B不需要显式释放
free(s3.content); free(s3); // 对应C
和B相比,A优点是长度灵活,由malloc参数决定。
和C相比,A优点是以整个结构体去申请空间,一次即可,空间连续,释放结构体空间的时候也就顺带把content空间释放了。C还得为content成员去申请空间,销毁结构体的时候还需要把申请的空间释放,不然会出现内存泄漏。
结构体长度对比,A最短:
sizeof(struct A) == 0;
sizeof(struct B) == 10;
sizeof(struct C) == 4;