一.int[][]和int **的区别:
相当明显,int[][]是连续的空间!而int**a是半连续的,即不同的行是不连续的,但是同一列是连续的
所以:在参数传递时候,二者不可互传,即使是[][]传**,因为int** 和a[][]虽然传的都是地址,但是一个在栈空间连续,另一个在堆空间半连续!
而且int a[][num]的数据类型是int(*)[num]类型的,所以,int[][]之间的传参,必须指定最后一维
二.二者的相同点:
都可以用来表示或者说存储二位数组,而且都可一用地址运算符:[][]访问
蛋疼的int[][]:
在用之前就必须指定它大小,因为空间连续分配
三.int **的分配与回收
//分配
int **b=new int*[3];
for(int i=0;i<3;i++){
b[i]=new int[5];
}
//回收:必须先回收低维度再回收高维度不然内存泄露
for(int i=0;i<3;i++){
delete[] b[i];
}
delete[] b;
//补充说明:delete后面加[]代表回收整个数组,加不加[]与new那儿加不加一致