柔性数组的介绍和简单使用说明,柔性数组的介绍和简单使用教案
也许你从来没有听说过灵活阵列的概念,但它确实存在。在C99中,结构中的最后一个成员允许是一个大小未知的数组,称为灵活数组成员。
1.什么是灵活阵列?
结构中的最后一个成员允许是大小未知的数组,称为灵活数组成员。
结构S
int n;
int arr[];//未知大小的灵活数组成员,数组的大小可以调整
int main()
结构S;
printf(%d\n ,sizeof(s));//计算二级结构输出4的大小不计算arr数组的大小
返回0;
}
我们创建的灵活阵列的一般用途:
结构S
int n;
int arr[];
int main()
//创建一个结构指针ps,动态分配4个20字节的内存给它。
struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));
返回0;
//可以使用灵活的数组arr
免费(PS);
ps=NULL
返回0;
}
2.灵活阵列的优势是什么?
我们先来看下面两个代码。
1代码使用灵活的数组实现功能
结构S
int n;
int arr[];
int main()
//创建一个结构指针ps,动态分配4个20字节的内存给它。
struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));
PS-n=100;
int i=0
for(I=0;我我)
PS-arr[I]=I;//为数组arr赋值0 1 2 3 4
免费(PS);
ps=NULL
返回0;
2代码使用常用的嵌套指针实现函数。
结构S
int n;
int * arr
int main()
struct S * PS=(struct S *)malloc(sizeof(struct S));
PS-arr=malloc(5 * sizeof(int));
int i=0
for(I=0;我我)
PS-arr[I]=I;//为数组arr赋值0 1 2 3 4
//释放两个打开的内存
免费(PS-arr);
PS-arr=NULL;
免费(PS);
ps=NULL
返回0;
代码1和代码2都可以实现arr数组大小的灵活调整。但是代码1有两个好处:
方便的内存释放
如果我们的代码在一个给别人的函数里,你在里面做了二次内存分配,把整个结构返回给用户,用户可以通过调用free来释放这个结构,但是用户不知道这个结构里的成员也需要free,所以你不能指望用户发现这件事。所以我们一次性分配结构的内存和成员需要的内存,返回一个指向结构的指针给用户。用户可以通过释放一次来释放所有内存。
提高访问速度
连续内存可以提高访问速度,减少内存碎片。
结构中的灵活数组成员必须在另一个成员之前。
Zeof返回的这个结构大小不包括灵活数组的内容。
包含灵活数组的成员结构使用malloc()函数动态分配内存,分配的内存要大于结构的大小,以适应灵活数组的预期大小。
例如:
结构S
int n;//必须存在于灵活数组成员之前的成员
int arr[];
int main()
//这个结构的内存大小是4
结构S;
printf(%d\n ,sizeof(s));//计算二级结构输出4的大小不计算arr数组的大小
//动态分配4 20字节的内存给它24 4
struct S * PS=(struct S *)malloc(sizeof(struct S)5 * sizeof(int));
返回0;
}
这就是我今天要讲的内容。本文只简单介绍一下灵活数组,是我的笔记和上课的一些体会。
希望对大家有帮助!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。