当前位置: 首页 > news >正文

C语言复习--柔性数组

        柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员。

        格式大概如下

struct S
{
    int a;
    char b;
    int arr[];//柔性数组
};

也可以写成

struct S
{
    int a;
    char b;
    int arr[0];//柔性数组
};

柔性数组的特点

柔性数组的使用

#include<assert.h>
struct S
{int a;char b;int arr[];//柔性数组
};
int main()
{//柔性数组和其所在的结构体的空间都是malloc来的struct S* ptr = (struct S*)malloc(sizeof(struct S) + sizeof(int) * 10);assert(ptr);ptr->a = 10;ptr->b = 'x';for (int i = 0; i < 10; i++){*(ptr->arr + i) = i;}printf("%d %c\n", ptr->a, ptr->b);for (int i = 0; i < 10; i++){printf("%d ", ptr->arr[i]);}printf("\n");//如果觉得空间不够还可以用realloc来扩容//要释放空间free(ptr);ptr = NULL;return 0;
}

柔性数组的优势

        上面的代码也可以用下面的代码来实现.两者功能完全相同.

#include<assert.h>
struct S
{int a;char b;int* arr;//柔性数组
};
int main()
{struct S* ptr = (struct S*)malloc(sizeof(struct S));assert(ptr);ptr->arr = (int*)malloc(sizeof(int) * 10);assert(ptr->arr);ptr->a = 10;ptr->b = 'x';for (int i = 0; i < 10; i++){*(ptr->arr + i) = i;}printf("%d %c\n", ptr->a, ptr->b);for (int i = 0; i < 10; i++){printf("%d ", ptr->arr[i]);}printf("\n");free(ptr->arr);ptr->arr = NULL;free(ptr);ptr = NULL;return 0;
}

        以上就是我了解到的柔性数组了.希望有所帮助.

相关文章:

  • Vite Proxy配置详解:从入门到实战应用
  • Activity动态切换Fragment
  • 养生:为健康生活添彩
  • 【Linux第三章】vim
  • 达索PLM系统是什么?有什么用?
  • 亿级流量系统架构设计与实战(六)
  • 【MySQL】事务(重点)
  • 【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析
  • PyTorch API 9 - masked, nested, 稀疏, 存储
  • Linux 阻塞和非阻塞 I/O 简明指南
  • 复习javascript
  • Python_day21
  • 基于大模型的新型隐球菌脑膜炎智能诊疗全流程系统设计与实现的技术方案文档
  • 青少年编程与数学 02-019 Rust 编程基础 05课题、复合数据类型
  • 【从零实现JsonRpc框架#1】Json库介绍
  • Edububtu 系统详解
  • ASCLL码(T^T
  • 前端进化论·JavaScript 篇 · 数据类型
  • Python面向对象编程:初识类与对象
  • 数据库故障排查指南:从连接问题和性能优化
  • php网站开发费用/石家庄seo排名公司
  • 社交网站开发注意事项/资源企业网站排名优化价格
  • 怎么制作网站app/疫情最新消息今天公布
  • 泰安正规网站建设公司电话/cms网站
  • 做网站在哪/上海网络推广需要多少
  • 吉林省建设标准化网站/十大搜索引擎地址