二维数组 二级指针 参数传递 ゝ一世哀愁。 2022-11-30 12:24 167阅读 0赞 #### 指针数组参数传递 #### 二维数组不能作为二级指针参数进行传递,无法强制转换。即: 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];
还没有评论,来说两句吧...