简单总结:堆与栈的区别
参考: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)
二维数组的使用
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;
关于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分配的空间会自动初始化为零