C++-二维数组与二级指针-为何二维数组不可以作为函数实参进行转化

本文探讨了在C++编程中,二维数组和二级指针在内存布局上的差异,解释了为什么不能直接将二维数组作为二级指针的函数参数。通过实例解析了二维数组的内存连续性以及二级指针的堆分配特点,阐述了这种差异导致的传参问题。
摘要由CSDN通过智能技术生成

背景:

在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.地址,地址的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值