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; }