是不是看着标题进来了,认为自己看错了?因为平常我们c编程的时候数据长度都是固定好的,没有听说过c还能实现变长数组??不过你没看错,c99中确实是有柔性数组的概念,也就是可变长数组,C99中允许结构体中的最后一个成员是长度未知的数组,其定义格式如下:
typedef struct
{
int a;
char data[];
}st,*pst;
有的编译器上述定义会报错,可以写成以下方式:
typedefstruct
{
int a;
char data[0];
}st,*pst;
先猜猜这个结构体的实际大小是多少??大家可以自己试一下,用sizeof(st)测试一下这个结构体的实际大小,结果是4,很显然data并没有占用实际内存,这样就成功定义了一个柔性数组,那么我们如何使用呢?
下面就要用到动态内存分配函数了:使用方式如下:
*pst gpst = (*pst)malloc(sizeof(st)+n);
n就是data数组的长度,当然了,使用完毕记得释放内存。
free(gpst);
gpst = null;
至于释放之后为什么赋值null是为了避免出现野指针,至于为什么会出现野指针可以自行百度,或者微信回复解答,这基本上就讲完了C语言的柔性数组。
留一个问题吧,下面这个结构体和上面的有什么区别,能通用嘛???欢迎留言回复讨论!!!
typedef struct
{
int a;
char *data;
}st,*pst;
喜欢的可以关注下微信哦
c语言编程之可变长数组
网友评论