当前位置: 首页 > 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;
}

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

http://www.xdnf.cn/news/371305.html

相关文章:

  • 如何在mac上使用便利贴
  • 青少年编程与数学 02-019 Rust 编程基础 06课题、容器类型
  • Docker镜像搬运工:save与load命令的实战指南
  • 【Android】文件分块上传尝试
  • 【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路
  • 基于GF域的多进制QC-LDPC误码率matlab仿真,译码采用EMS算法
  • Spring之AOP
  • 信息检索(包含源码)
  • 服务预热原理
  • 动态路由EIGRP的配置
  • AutoGen+Deepseek+chainlit的简单使用
  • iOS瀑布流布局的实现(swift)
  • HNUST湖南科技大学-软件测试期中复习考点(保命版)
  • Kubernetes应用发布方式完整流程指南
  • Dia浏览器:AI驱动浏览网页,究竟怎么样?(含注册申请体验流程)
  • Harness: 全流程 DevOps 解决方案,让持续集成如吃饭般简单
  • 【字节拥抱开源】字节豆包团队开源首发 Seed-Coder 大模型
  • QSFP+、QSFP28、QSFP-DD接口分别实现40G、100G、200G/400G以太网接口
  • Flask 调试的时候进入main函数两次
  • 机器学习扫盲系列-深入浅出“反向传播”(二)
  • 第21天打卡
  • 流动式起重机Q2考试的实操部分,重点复习内容包括哪些方面?
  • 路由策略和策略路由的区别以及配置案例
  • 【C++指南】STL容器的安全革命:如何封装Vector杜绝越界访问与迭代器失效?
  • 图像处理篇---opencv实现坐姿检测
  • 系统级编程(四):利用windows API使用操作系统剪切板
  • [学习]RTKLib详解:rtksvr.c与streamsvr.c
  • Vue基础(8)_监视属性、深度监视、监视的简写形式
  • 扩容 QCOW2 磁盘镜像文件
  • 将循环队列中的各元素向右移动n步collections.deque.rotate(n)