网站排名软件利搜,谷歌seo排名公司,建跨境电商网站多少钱,wordpress点击图片弹出文章目录 前言一、柔性数组的介绍1.1 柔性数组的定义 二、柔性数组的使用2.1 使用说明2.2 结构体中的成员只包含一个柔性数组成员2.3 结构体中的成员包含其他成员和一个柔性数组成员 三、模拟柔性数组总结 前言
本篇文章介绍c语言中的柔性数组。 一、柔性数组的介绍
1.1 柔性… 文章目录 前言一、柔性数组的介绍1.1 柔性数组的定义 二、柔性数组的使用2.1 使用说明2.2 结构体中的成员只包含一个柔性数组成员2.3 结构体中的成员包含其他成员和一个柔性数组成员 三、模拟柔性数组总结 前言
本篇文章介绍c语言中的柔性数组。 一、柔性数组的介绍
1.1 柔性数组的定义
在定义一个结构体类型时结构体的最后一个成员变量允许为一个没有大小的数组时这个数组称为柔性数组。 注意点柔性数组成员必须是结构体成员的最后一个成员 例如下面定义一个拥有柔性数组的结构体类型 方式一
struct S
{int n;int arr[0]; //数组大小未知柔性数组
};方式二
struct S
{int n;int arr[]; //数组大小未知柔性数组
};二、柔性数组的使用
2.1 使用说明
sizeof返回的包含柔性数组的结构体的大小时返回值不包括柔性数组的大小。包含柔性数组的结构体使用malloc()函数进行动态内存的分配并且分配的内存大小应该大于结构体的大小以适应柔性数组的预期大小。可以使用realloc()函数修改柔性数组的大小。
2.2 结构体中的成员只包含一个柔性数组成员
结构体定义
//结构体成员只存在柔性数组成员
struct Single_S
{int arr[0];
};使用malloc()为柔性数组分配空间
#includestdio.h
#includestdlib.h
#includestring.h
#includeerrno.h
int main()
{struct Single_S* ps (struct Single_S*)malloc(20);if (NULL ps){printf(%s\n, strerror(errno));return 1;}//使用int i 0;for (i 0; i 5; i){ps-arr[i] i;}//动态修改struct Single_S* ptr (struct Single_S*)realloc(ps,40);if (ptr ! NULL){ps ptr;ptr NULL;//使用从ps-arr[5]开始因为0~4已经初始化for (i 5; i 10; i){ps-arr[i] i;}}//释放free(ps);ps NULL;return 0;
}通过vs的内存监视查看内存情况
2.3 结构体中的成员包含其他成员和一个柔性数组成员
结构体定义
struct S
{int n;int arr[]; //数组大小为0柔性数组
};
使用malloc()为柔性数组分配空间
int main()
{//申请sizeof(struct S)20struct S* ps (struct S*)malloc(sizeof(struct S)20);if (NULL ps){printf(%s\n, strerror(errno));return 1;}//使用ps-n 5;int i 0;for (i 0; i 5; i){ps-arr[i] i; //赋值}//扩容sizeof(struct)40struct S* ptr (struct S*)realloc(ps,sizeof(struct S)40);if (ptr ! NULL){ps ptr;ptr NULL;//使用ps-n 10;for (i 5; i 10; i){ps-arr[i] i; //赋值}}//释放free(ps);ps NULL;return 0;
}通过vs的内存监视查看内存情况
三、模拟柔性数组
结构体定义
struct SS
{int n;int* arr; //int*指针
};为了模拟柔性数组在创建结构体变量时采用malloc()为结构体分配内存。
int main()
{//创建结构体struct SS* ps (struct SS*)malloc(sizeof(struct SS));if (NULL ps){printf(%s\n, strerror(errno));return 1;}//创建一块5个int大小的空间ps-arr (int*)malloc(5*sizeof(int));if (ps-arr ! NULL){ps-n 5;int i 0;for (i 0; i 5; i){ps-arr[i] i; //赋值}}//扩容int* ptr (int*)realloc(ps-arr, 10*sizeof(int));if (ptr ! NULL){ps-arr ptr;ptr NULL;ps-n 10;int j 0;for (j 5; j 10; j){ps-arr[j] j; //赋值}}//释放ps-arrfree(ps-arr);ps-arr NULL;//释放psfree(ps);ps NULL;return 0;
}通过vs的内存监视查看内存情况 使用这种方式需要进行两次释放操作首先释放数组的空间然后释放结构体的空间。 总结
本篇文章介绍了柔性数组的定义和使用最后模拟实现柔性数组。