admin管理员组文章数量:1794759
C语言 动态创建数组学习总结
目录
- 1. 前言
- 2. 原理
- 3. malloc和calloc介绍
- 3.1 malloc函数
- 3.2 calloc函数
- 3.3 free函数
- 3.4 注意事项
- 4. 代码演示
- 4.1 动态创建一维数组
- 4.2 动态创建二维数组
- 5. 总结
C语言不允许直接使用 arr[n] 来声明一个数组,但是借助malloc和calloc函数就可以实现动态创建数组。
2. 原理先来看看符合C语言标准的数组定义:int arr[10];这个语句中包含了:“类型说明符” “数组名”和“常量(表达式)”三个信,编译器拿到这三个信之后会向系统申请所需要的内存,之后就可以通过“数组名”来使用这块内存空间。
动态创建数组就是把“常量(表达式)” 替换成 “变量(表达式)”,但是编译器不会自动帮我们完成这项任务,所以,只需要手动申请一段内存空间,然后通过指针访问这段内存空间就可以实现动态创建数组了。
在C语言中可以使用malloc和calloc函数手动申请内存。
3. malloc和calloc介绍 3.1 malloc函数- malloc的原型为:void *malloc(size_t size); 参数就是需要分配的内存字节数。
- 如果内存池内的可用内存满足需求,malloc就返回一个指向被分配的内存块起始位置的void * 类型的指针。正因为返回是一个 void * 类型的指针,所以它可以将其转换成任意类型。
- 当内存池中的容量不足以满足malloc的申请时,malloc会返回NULL 指针。
- calloc的原型为:void *calloc(size_t num_elements, size_t element_size); 第一个参数是 元素的个数,第二个参数是 单个元素的字节数。
- calloc除了参数与malloc不同外最大的区别就是:calloc将分配的内存都初始化为0了,而malloc没有初始化。除此之外,两个函数是相同的。
- free的原型为:void free(void *pointer);
- 每当手动分配的内存不再使用时,都应该调用free函数归还分配的内存空间
创建长度为n的数组
#include <stdio.h> #include <stdlib.h> int main() { int n; int *arr; scanf("%d", &n); //arr = (int *)calloc(n, sizeof(int)); if (arr = (int *)malloc(n * sizeof(int)) == NULL) { printf("error\\n"); exit(1); } /* 中略 */ free(arr); return 0; } 4.2 动态创建二维数组创建大小为m × n的二维数组
#include <stdio.h> #include <stdlib.h> int main() { int m, n; int** arr; scanf("%d%d", &m, &n); // 二维数组需要由外而内依次创建 if (arr = (int**)malloc(m * sizeof(int*)) == NULL) { exit(1); } for (int i = 0; i < m; i++) { if (arr[i] = (int*)malloc(n * sizeof(int)) == NULL) { exit(1); } } /* 中略 */ // 释放内存时需要由内而外依次释放 for (int i = 0; i < m; i++) { free(arr[i]); } free(arr); return 0; 5. 总结更高维的数组与二维数组类似,只要遵循:申请时由外而内,释放时由内而外即可。
本文仅为个人的学习总结,如有错误还请指教。
版权声明:本文标题:C语言 动态创建数组学习总结 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686626154a87902.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论