长度为0的数组的优点

举例说明

比如,要求定义一个用于存储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;

参考资料

https://www.cnblogs.com/tangxin-blog/p/5560699.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值