不能将二维数组赋值给指针的指针,如下面的例子是错误的
int arrray [2][3];
int **pointer = array; // error
pointer[0][1]= 1;
用指针向函数传递一个多维数组:
方法一,函数是 void fun(int arr[2][3]); 这种方法只能处理2行3列的int型数组。
方法二,可以省略第一维的长度。函数是 void fun(int arr[][3]);这种方式虽然限制宽松了一些,但是还是只能处理每行是3个整数长度的数组。
或者写成这种形式 void fun(int (*arr)[3]);这是一个数组指针或者叫行指针,arr和*先结合使得arr成为一个指针,这个指针指向具有3个
int类型数据的数组。
方法三,创建一个一维数组,数组中的元素是指向其他东西的指针,也即二级指针。函数是 int fun(int **arr);这种方法可以动态处理各行各列不一样长度的数据。
#include <iostream>
using namespace std;
void test(char **ptr)
{
cout << *ptr << endl;
}
int main()
{
char *p[3] = {"abc", "def", "ghi"};
test(p);
return 0;
}