提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一 柔性数组
- (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++内存领域的划分
如图:
 

















