柔性数组

定义

结构中最后一个元素允许是未知大小的数组,这个数组就是柔性数组。

注意点

1结构中的柔性数组前面必须至少一个其他成员,柔性数组成员允许结构中包含一个大小可变的数组。

2.sizeof返回的这种结构大小不包括柔性数组的内存。

3.包含柔数组成员的结构用malloc函数进行内存的动态分配,且分配的内存应该大于结构的大小以适应柔性数组的预期大小。

4.在C99中支持且c99中定义为例如char a[];不能定义为char a[0];,C89不支持

用法

typedef struct st_type
{
    int i; 
    int a[0];
}type_a;
//会报错 C99不支持定义0个数组,只是某些编译器支持

改为

typedef struct st_type
{
    int i; 
    int a[];
}type_a;

sizeof(type_a) = 4,说明柔性数组不占用空间,那往柔性数组中添加元素看看占不占用空间
如下

#include <iostream>
#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

struct Value
{
    int v;
    char a[]; 
};
int main(int argc, char *argv[]) 
{
    Value *p = (Value*)malloc(sizeof(Value)+100*sizeof(char));
    //(*p).a = "hello world";
    memcpy(p->a,"hello world",12);//拷贝元素
    printf("分配元素后柔性数组占用空间%d\n",sizeof(p->a));
    printf("%s\n",p->a);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WAF001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值