本文主要是介绍C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、柔性数组
- 二、柔性数组的特点
- 三、柔性数组的使用
- 总结
前言
C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍。
一、柔性数组
C99中,结构中的最后一个元素是允许未知大小的数组,这就叫做【柔性数组】成员。
struct S
{int i;int a[]; // 未知大小的数组,柔性数组成员
};
二、柔性数组的特点
- 结构中的柔性数组成员前面必须至少一个其他成员。
- sizeof 返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
#include <stdio.h>
struct S
{int i;int a[];
};int main()
{printf("%d\n", sizeof(struct S)); // 4// sizeof 不包括 柔性数组的大小return 0;
}
三、柔性数组的使用
#include <stdio.h>
#include <stdlib.h>struct S
{int n;int a[];
};
int main()
{struct S* ps = (struct S*)malloc(sizeof(struct S) + 40);// 开辟一块 4 + 40 个字节大小的空间,数组大小为40字节if (NULL == ps){// ....报错return 1;}ps->n = 100;// 柔性数组的使用int i = 0;for (i = 0; i < 10; i++){ps->a[i] = i;}printf("%d\n", ps->n); // 100for (i = 0; i < 10; i++){printf("%d ", ps->a[i]);// 0 1 2 3 4 5 6 7 8 9 }// 增容struct S* str = (struct S*)realloc(ps, sizeof(struct S) + 80);if (str != NULL){ps = str;str = NULL;}// 释放free(ps);ps = NULL;return 0;
}
总结
C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍。
这篇关于C语言柔性数组、柔性数组的特点、柔性数组的使用等的介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!