美文网首页
c语言编程之可变长数组

c语言编程之可变长数组

作者: 帅气的店小二 | 来源:发表于2018-12-27 22:17 被阅读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语言编程之可变长数组

相关文章

  • c语言编程之可变长数组

    是不是看着标题进来了,认为自己看错了?因为平常我们c编程的时候数据长度都是固定好的,没有听说过c还能实现变长数组?...

  • C语言,变长数组不是动态数组

    查余补漏: 在前几次的讲解中,有朋友提出C语言的内存分配只是malloc和free,然后还有在缓存章节的有朋友提出...

  • C柔性数组和变长数组

    变长数组 C语言在C99以前,数组的维度必须是整数常量表达式, 而C99则做了很大改进,允许数组维度为整形变量或者...

  • C语言中变长数组--struct hack

    struct hack 是一种用来实现变长数组的常见技巧,不必再构造时就确定数组的长度,延迟到运行时确定。 c标准...

  • 第4周:链表——4.1 可变数组

    1.可变数组 C 语言数组大小固定,无法改变。 考虑用 C 语言实现一个可以变大小的 int 数组:可成长,能得到...

  • C语言数组的升维与降维之说

    C语言数组的升维与降维之说 C语言数组的升维 C语言数组的降维

  • 宏的妙用

    [TOC] 变长数组 ​ 严格说来,变长数组的实现在c++中并不是一件麻烦的事情。Stl中的vector本身就...

  • C语言基础教程之数组

    C 数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它...

  • Scala学习第七节:定长与变长Array

    定长数组 变长数组 变长数组 需要导入scala.collection.mutable.ArrayBuffer

  • 软件安全-格式化字符串攻击

    探索C语言的可变长参数 C语言标准库中头文件stdarg.h索引的接口包含了一组能够遍历变长参数列表的宏。 主要包...

网友评论

      本文标题:c语言编程之可变长数组

      本文链接:https://www.haomeiwen.com/subject/gjodlqtx.html