背景:
在C++编程时,经常会遇到需要把二维数组传给函数参数,而我们的二维数组可能是堆分配的二级指针或者直接声明规模的二维数组。这个时候如果函数的形参与该数组的形式不同,就会造成编译结果偏差。
解决方法:
首先,先不说为什么,咱先给出解决方式,那就是把形式对准就好了。
(1)如果声明int a[4][2],那函数的参数就是void b(int ( *a)[2])
(2)如果声明int **a,a=new int *[4],for(int i=0;i<4;i++) { a[i]=new int[2];},那函数的参数就是void b(int **b);
问题:为什么二维数组不可以传给函数参数中的二级指针呢?
该问题我们可以在以下几个方面进行解释:
1.二维数组和二级指针在内存中区别是什么?
2.如果二维数组传给函数中的二级指针会怎么样?
回答:
首先,我们先解释一个许多同学可能会问的问题,那就是:
1.变量的变量名存放在哪?
答:
变量名只是我们用于编程时需要用到的。在经过汇编之后,变量名也随之转化为地址,到此时,并不存在变量名。也就是说在内存中无需太过注意变量名存放在哪。
2.地址,地址的地址