c语言编程之可变长数组

2018-12-27  本文已影响0人  帅气的店小二

是不是看着标题进来了,认为自己看错了?因为平常我们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语言编程之可变长数组
上一篇 下一篇

猜你喜欢

热点阅读