柔性数组——c语言
作者:互联网
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