C语言 ——— 柔性数组

目录

柔性数组的概念以及定义

柔性数组的特点

柔性数组的使用


柔性数组的概念以及定义

概念:

C99中,结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员

定义:

复制代码
struct st_type
{
	int i;
	int a[0]; //柔性数组成员
};

当以上代码形式编译不通过时,可改为一下代码形式

复制代码
struct st_type
{
	int i;
	int a[]; //柔性数组成员
};

柔性数组的特点

1. 结构中的柔性数组成员前面必须至少有一个其他成员

2. sizeof 计算的这种结构大小不包括柔性数组的内存

代码验证:

3. 包含柔性数组成员的结构用 malloc 函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小

代码演示:

复制代码
#include<stdio.h>
typedef struct st_type
{
	int i;
	int a[0]; //柔性数组成员
}ST;
int main()
{
	//                     4       +       40
    ST* s = (ST*)malloc(sizeof(ST) + sizeof(int) * 10);

	return 0;
}

柔性数组的使用

代码演示:

复制代码
#include<stdio.h>
#include<stdlib.h>
typedef struct st_type
{
	int sz;
	int a[0]; //柔性数组成员
}ST;
int main()
{
	//                     4       +       40
	ST* s = (ST*)malloc(sizeof(ST) + sizeof(int) * 10);

	// 判断是否开辟成功
	if (s == NULL)
	{
		perror("malloc");
		return -1;
	}

	// 赋值
	s->sz = 10;

	for (int i = 0; i < s->sz; i++)
	{
		s->a[i] = i;
	}

	// 打印验证
	printf("%d\n", s->sz);

	for (int i = 0; i < s->sz; i++)
	{
		printf("%d ", s->a[i]);
	}

	// 释放动态开辟的内存空间
	free(s);
	s = NULL;

	return 0;
}

代码验证:

相关推荐
wuminyu1 小时前
Kafka配置TLS/SSL加密传输时零拷贝失效分析
java·linux·c语言·jvm·c++
yanlaifan4 小时前
C语言标准版本简单介绍
c语言
wuyk55513 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
xx~t14 小时前
嵌入式——51单片机1
linux·c语言·单片机·嵌入式硬件·51单片机
Navigator_Z15 小时前
LeetCode //C - 1240. Tiling a Rectangle with the Fewest Squares
c语言·算法·leetcode
码行山野赴时序归途15 小时前
C语言预处理指令:编译前的“幕后导演“
c语言·开发语言
2401_8582861118 小时前
130.【C语言】可变参数宏
c语言·开发语言
彧azz19 小时前
B树原理与C语言实现
c语言·数据结构·b树
零依赖极客19 小时前
《30 天手搓 ARM 架构零依赖纯 C 推理引擎》课程介绍与大纲
c语言·开发语言·arm开发·人工智能·嵌入式硬件·ai编程
LuminousCPP19 小时前
数据结构-排序(三):快速排序进阶|挖坑法、双指针交换与手动栈非递归实现
c语言·数据结构·笔记·算法·排序算法