C/C++ 二维指针数组与修改指针所指对象的函数传递问题

1、二维指针数组函数传递问题

1、二维数组的函数传递问题
在考虑这个问题前,我们首先要了解数组a[2]的a的含义,其实a可以看作一个指向数组元素类型并指向数组内第1个元素的指针。
当我们要将二维数组作为函数参数时,可以参照一维数组的方法,一维数组sd[2]作为参数时,是将指向第1个元素的地址传递进去并给出元素个数,假设函数原型为 fun1(int *p_num),则调用时为func1(sd,2)。
二维数组与此类似,假定二维数组为:int arr[2][3];那么arr可以看成一个有2个元素的数组,其每个元素为含有3个元素的数组,其中arr的地址等于arr[0]的地址,也等于arr[0][[0]的地址。若将二维数组看作“一维”数组"arr[2]",那么将二维数组作为参数时,也是将指向第1个元素的地址传递进去并给出元素个数,我们知道指向含有3个int型元素数组的指针定义为int (*p)[3],那么函数原型为:func2(int (*p)[3],int dems),函数调用时为func2(arr,2)。此时需要与int **p相区分,此时的指针p指向的是指向单个元素指针的地址,与指向含有多个元素数组地址的指针不同
2、二维指针数组的函数传递问题
二维指针数组与一般二维数组只是数组元素的不同,在定义方面,二维数组的定义为 int arr[2][3],二维指针数组的定义为 int *ptr_arr[2][3],那么指向含有三个指向int 型元素指针的数组的指针定义为int *(*p)[3],那么函数原型为func2_ptr(int * (*p)[3],int dems),函数调用时为func2_ptr(ptr_arr,2);
3、函数内二维数组的元素访问与处理
当我们进行函数实现时,对二维数组的访问与处理必不可少(此时一般二维数组与二维指针数组一致,只是处理的元素类型不同而已),以变量定义int arr[2[3],函数定义func2(int (*p)[3],int dems)为例,则在函数内,p相当于arr,也就是arr[0];p+1,相当于arr[1],*(p+1)+1,相当于arr[1]+1,也相当于arr[1][1]的地址,那么*(*(p+1)+2)相当于arr[1][2]。

2、修改指针所指对象的函数传递问题

当我们在函数内想修改对象的值时,我们需要把对象的地址传入函数内。当我们在函数内想修改一个指针所指对象时,我们需要把指针的地址传入函数内,假定变量 int a=0,b=3;int *p=&a,若想在函数内将指针p指向变量b,则定义函数应该为func1(int **p,int *addr),将指针的地址也传递进去,调用为func1(&p,&b)。在函数内修改指针的指向时,可采用(*p)=addr来修改指针的指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值