提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一 柔性数组
- (1)什么是柔性数组
- 1)柔性数组的声明
- 2)柔性数组的特性
- (2)柔性数组的使用
- 二 c/c++内存领域的划分
一 柔性数组
(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++内存领域的划分
如图: