一 柔性数组
(1)什么是柔性数组
1)柔性数组的声明
c99中规定 在结构体中,如果其最后的一个结构体成员为数组,
且此数组的大小未指定,称其为柔性数组
声明如下:
struct S {
int a;
int arr[];
};
//也可以写成这种格式
struct S2
{
int a;
int arr1[0];
};
//在某些编辑器中,支持第一种格式,另外的一些支持第二种格式
2)柔性数组的特性
当对存在柔性数组的结构体求其大小时,不将柔性数组的大小考虑在内
struct S {
int a;
int arr[];
};
int main(){
size_t len = sizeof(struct S);
printf("%zd\n", len);
return 0 ;
}
(2)柔性数组的使用
struct S {
int a;
int arr[];
};
int main(){
struct S * ps = (struct S*)malloc(4 + 5 * sizeof(int));
//分配一个整型空间与5个元素的整型数组空间
assert(ps);
for (int i = 0; i < 5; i++) {
ps->arr[i] = i;
printf("%d\n", ps->arr[i]);
}
struct S* ps2 = realloc(ps, 30);
if(ps2!=NULL){
ps = ps2;
}
free(ps);
ps = NULL;
return 0 ;
}
二 c/c++内存领域的划分
如图: