简单总结:堆与栈的区别
参考:http://blog.csdn.net/cc214042/article/details/52728924
使用堆与栈,一维数组
- 1 //定义长度为size的数组
- 2 //在栈上
- 3 int array[size];
- 4
- 5 //在堆上
- 6 //C++语法 new delete
- 7 int *array = new int[size]
- 8 //释放
- 9 delete[] array;
- 10
- 11 //C语法
- 12 int *array =(int *)malloc(size)
- 13 //释放
- 14 free(array)
View Code
二维数组的使用
- 1 //在栈上创建
- 2 int array[M][N]
- 3
- 4 //传递给子函数
- 5 void func(int array[M][N]){
- 6 //M可以省略,N不能,编译器确定移动内存的间距
- 7 }
- 8
- 9 //在堆上创建
- 10 //C++
- 11 int **array = new int*[M]
- 12 for(int i = 0; i < M; i++){
- 13 array[i] = new int[N];
- 14 }
- 15
- 16 //C
- 17 (int **)malloc(M * sizeof(int*))
- 18 (int *)malloc(N*sizeof(int))
- 19
- 20 //传递给子函数
- 21 void func(int **arr, int M, int N){
- 22
- 23 }
- 24
- 25 //释放
- 26 for(int i = 0; i < M; i++){
- 27 delete[] array[i];
- 28 }
- 29 delete[] array;
View Code
关于malloc new calloc 的比较:
参考:https://www.cnblogs.com/wgang171412/p/5046235.html
- 1 //原型
- 2 void *malloc(int size);
- 3 //使用
- 4 int *p;
- 5 p = (int *)malloc(sizeof(int))
- 6 //返回类型为void* ,而new返回指定类型的指针,并自动计算所需要大小
- 7
- 8 //new 数据类型
- 9 //new 数据类型(初始值)
- 10 //new 数据类型(常量表达式)
- 11
- 12 int *p1 = new int[100];
- 13 //返回类型为 int* 整数型指针,分配大小为 sizeof(int) * 100
- 14
- 15 int *p2 = new int(2);
- 16 int *p3 = new int[1000];
- 17
- 18 void *calloc(size_t numElements, size_t sizeOfElement);
- 19 //分配空间大小 = numElements * sizeOfElement
- 20 //malloc分配的空间可能被使用过,存在遗留数据
- 21 //calloc分配的空间会自动初始化为零
View Code