二维数组 二级指针 参数传递

本文详细解析了在C语言中,一维数组、二维数组、指针数组及数组指针作为函数参数时的传递机制。阐述了二维数组不能直接转化为二级指针进行传递的原因,以及如何正确地进行参数传递。
指针数组参数传递

二维数组不能作为二级指针参数进行传递,无法强制转换。即:

void fun(char **p);
char str[2][6] = {"hello", "world"};

fun(str);

这样的调用会出错。

但是指针可以转化为二级指针。如:

void fun(char **p);
char *str[6] = {"hello", "world"};

fun(str);

这样调用就OK。

数组指针参数传递

下面这种情况,调用会出错。

void func(int **p);
int ary[2][6];

func(ary);

这种情况下,二维数组不能转化为二级指针。进行如下修改。

void func(int (*p)[6]);
int ary[2][6];

func(ary);

这样调用正确。

通过上面的例子可以看出,二维数组可以转化为数组指针,指针数组可以转化为二级指针。二维数组名其实就是一个数组指针,指向的是数组,因此二维数组可以转化为数组指针。指针数组,是一个数组,数组元素的类型是指针,一个是指向指针,一直是指向数组,因为基本数据类型不是数组指针,因此不可以进行转化。而二级指针,是指向指针的指针,数组指针名是指针,指向数组元素,数组元素也是指针,因此数组指针是指向指针的指针,因此可以和二级指针进行转化。

上面的转化是针对默认转化来说的。

数组指针和指针数组对应的关系应该如下:

int ary[2][6];
int (*ary1)[6];
int *ary2[2];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值