c99, 结构中的最后一个元素允许是未知大小的数组,这就叫柔性数组成员。
1. 柔性数组
#include<stdio.h>
struct S
{
int a;
char arr[];//柔性数组
}
//有些编译器支持这样书写柔性数组
struct S
{
int a;
char arr[0];//柔性数组
}
2.柔性数组的使用方法
#include <stdio.h>
struct s
{
int n;
int arr[0];//未知大小的-柔性数组成员-数组大小是可以调整的
};
int main()
{
struct s* ps = malloc(sizeof(struct s) + 5 * sizeof(int));
}
3、柔性数组的特点
- 结构中的柔性数组成员前面必须至少一个其他成员。
- sizeof 返回的这种结构大小不包括柔性数组的内存。
- 包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
4.替代柔性数组的写法
#include <stdio.h>
struct 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; i < 5; i++)
{
ps->arr[i]=i;
}
for (i = 0; i < 5; i++)
{
printf("%d ", ps->arr[i]);
}
//调整大小
int* ptr = realloc(ps->arr, 10 * sizeof(int));
if (ptr != NULL)
{
ps->arr = ptr;
}
for (i = 5; i < 10; i++)
{
ps->arr[i] = i;
}
for (i = 5; i < 10; i++)
{
printf("%d ", ps->arr[i]);
}
free(ps->arr);
ps->arr = NULL;
free(ps);
ps = NULL;
return 0;
}
标签:ps,arr,语言,int,数组,柔性,struct 来源: https://blog.csdn.net/m0_61705102/article/details/121318506
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。