1.我们知道在函数对数组进行初始化数组的初始化结果会随着函数运行的结束而消失所以可以用malloc申请堆内存的方式对数组进行初始化#includestdio.h #includestdlib.h //设置一个能获取数组的函数 int* getArray() { int* res (int*)malloc(100 * sizeof(int)); for (int i 0; i 100; i) { res[i] i; } return res; } int main() { int* arr getArray(); for (int i 0; i 100; i) { printf(%d\n, arr[i]); } free(arr);//free不会清空所在地址的数据只是会收回对地址的使用权 arr NULL; return 0; }需要注意的点是malloc开辟了一个400字节的内存返回的结果是地址因此本来是void*的返回结果类型需要用int*的结果去接收这里还要注意的是要及时释放申请的堆内存不然的话长期未清理会导致系统卡死同时因为free函数只是收回对地址的使用权所以还要将数组清空避免以后会读取到之前的数据这样的话就可以实现在函数中对数组进行初始化了但同时malloc只是申请了内存没有对数组进行初始化当手动初始化的过程去掉之后代码就会变成这个结果#includestdio.h #includestdlib.h //设置一个能获取数组的函数 int* getArray() { int* res (int*)malloc(100 * sizeof(int)); return res; } int main() { int* arr getArray(); for (int i 0; i 100; i) { printf(%d\n, arr[i]); } free(arr);//free不会清空所在地址的数据只是会收回对地址的使用权 arr NULL; return 0; }2.因此我们可以使用calloc函数对数组进行自动初始化#includestdio.h #includestdlib.h //设置一个能获取数组的函数 int* getArray() { int* res (int*)calloc(100 , sizeof(int)); return res; } int main() { int* arr getArray(); for (int i 0; i 100; i) { printf(%d\n, arr[i]); } free(arr);//free不会清空所在地址的数据只是会收回对地址的使用权 arr NULL; return 0; }如图所示calloc会自动把申请内存的元素初始化为03.realloc对数组进行扩容如下#includestdio.h #includestdlib.h int main(){ int* arr1 (int*)malloc(10 * sizeof(int)); arr1 (int*)realloc(arr1, 20 * sizeof(int)); arr1 (int*)calloc(20, sizeof(int)); for (int i 0; i 20; i) { printf(%d, arr1[i]); printf(\n); } printf(\n); free(arr1); arr1 NULL; return 0; }realloc可以将原本10个整型元素的空间开辟到20个实现数组扩容的效果运行结果如下使用realloc进行扩容的时候需要注意的地方是realloc进行扩容原来的结果会保存新增加的部分分配垃圾值。