//柔性数组---结构体之前必须有其他成员,且最后一个数组成员大小未知 // // 优点:1.方便内存释放 // 2.有利于访问速度 // //struct S //{ // int n; // int arr[];//柔性数组---大小未知,sizeof计算结构大小时,不包含柔性数组的大小 // //或int arr2[0] //}; // //int main() //{ // struct S s= { 0 }; // printf("%s\n", sizeof(s));//sizeof计算结构大小时,不包含柔性数组的大小 // //期望arr是10个整形时 // struct S*ps=(struct*)malloc(sizeof(struct S) + 10 * sizeof(int)); // //sizeof(struct S)是数组大小,10*sizeof(int)是给arr准备的 // return 0; //} //柔性数组使用场景 struct S { int n; int arr[0]; }; int main() { struct S* ps = (struct S*)malloc(sizeof(struct S) + 10 * sizeof(int));//10 * sizeof(int))是预留空间 //不能频繁使用malloc,因为随着malloc开辟,内存碎片会增加 ps->n = 10; int i = 10; for (i = 0; i < 10; i++) { ps->arr[i] = i; } //需要增加大小时 struct S*ptr = (struct S*)realloc(ps, sizeof(struct S) + 20 * sizeof(int)); if (ptr != NULL) { ps = ptr; } //使用 //释放 free(ps); ps = NULL; return 0; }