C语言柔性数组的实现示例
作者:ainuliba
柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小未知的数组,本文就来介绍一下柔性数组的用法,感兴趣的可以了解一下
柔性数组:结构体中最后一个元素是未知大小的数组,数组大小可变
柔性数组特点
- ①结构体中的柔性数组成员前面必须至少有一个其他成员
- ②sizeof返回的结构体大小不包括柔性数组的内存
- ③包含柔性数组成员的结构体要用malloc()函数进行内存分配
使用free函数释放一块内存,不能多次释放同一块内存 ,否则程序会崩溃
柔性数组使用举例(结构体成员内存是连续的)
1.
#include<stdio.h>
#include<stdlib.h>
struct S{
int a;
int arr[0];
};
int main(){
struct S stu;
printf("%d\n",sizeof(stu));
//结果是4 数不包含柔性数组的大小
struct S *temp=(struct S*)malloc(4*sizeof(int));
for(int i=0;i<3;i++)
{
temp->arr[i]=i;
}
for(int i=0;i<3;i++)
{
printf("%d",temp->arr[i]);
}
//利用realloc改变数组大小
struct S *te=realloc(temp,10*sizeof(int));
if(te!=NULL)
{
temp=te;
}
for(int i=3;i<9;i++)
{
temp->arr[i]=i;
}
for(int i=3;i<9;i++)
{
printf("%d",temp->arr[i]);
}
free(temp);
temp=NULL;
return 0;
}
使用指针实现柔性数组的操作举例(结构体成员内存是不连续的)
2.
#include<stdio.h>
#include<stdlib.h>
struct S{
int a;
int *arr;
};
int main(){
struct S stu;
struct S *temp=(struct S*)malloc(sizeof(struct S));
temp->arr=(int *)malloc(3*sizeof(int));
for(int i=0;i<3;i++)
{
temp->arr[i]=i;
}
for(int i=0;i<3;i++)
{
printf("%d",temp->arr[i]);
}
int *te=realloc(temp->arr,10*sizeof(int));
if(te!=NULL)
{
temp->arr=te;
}
for(int i=3;i<10;i++)
{
temp->arr[i]=i;
}
for(int i=3;i<10;i++)
{
printf("%d",temp->arr[i]);
}
free( temp->arr);
temp->arr=NULL;
free(temp);
temp=NULL;
}到此这篇关于C语言柔性数组的实现示例的文章就介绍到这了,更多相关C语言 柔性数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
