传递2D数组作为参数

时间:2011-07-11 10:33:19

标签: c++ arrays pointers

在这个例子中:

int a[2][2]={{1,2},{3,4}};
int *p=a[0];
cout<<p;
cout<<&a[0][0];

两者都提供相同的输出。 那么为什么我不能像这样调用函数(说好玩)并遍历数组:

fun(a[0]);

fun(int *p)
{
cout<<p[1][1];
}

3 个答案:

答案 0 :(得分:3)

fun(a[0]); //this looks OK

void fun(int *p) // this is OK if you add return type'
^^^^
{
   cout<<p[1][1]; //NOT OK!  You can't have 2 indices on an `int*`
   cout << p[1]; // OK, will print a[0][1]
}

答案 1 :(得分:2)

回答你的问题: 当你写:

p = a[0];

a[0](现在是第0个元素到1D数组)实际上衰减到指针p。所以两者都不是完全相同的类型,尽管它们似乎是。当你写:

fun(a[0]);

您实际上正在传递0数组的元素,该元素现在是一维数组。所以你可以通过以下任何一种方式接收:

fun(int *p); // decay to pointer to 1D array
fun(int (&a)[2]); // receive array by reference

fun()现在都有1D数组的情况下。

为了简单起见,将引用传递给数组:

void fun(int (&p)[2][2])
{
  cout<<p[1][1];  // ok !
}

用法:

fun(a); // not a[0]

答案 2 :(得分:0)

你不能cout<<p[1][1];,因为pint * - 一维数组。