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

指针数组参数传递

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

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];

猜你喜欢

转载自blog.csdn.net/duapple/article/details/108193065