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

指针数组参数传递

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

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];
posted @   duapple  阅读(15)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示