C ++将多D数组传递给函数

时间:2013-12-28 12:27:22

标签: c++ pointers multidimensional-array

我想通过引用操作一个2x2数组A到一个函数,所以我的函数原型是:

void myFunction( int A[][2] );

我假设实际传递给函数的只是指向第一个元素的指针(与1D数组一样)。所以在函数内部我做了一个如下的赋值:

(*(A+1))[1] = 2;

To将更改元素A[1][1]的值(即使我的函数返回后)。

鉴于C++以这种方式自动通过引用将数组传递给函数,似乎没有必要在我的函数中显式传递指向数组的指针。但是如果我想这样做,我的函数原型的正确语法和上面赋值的模拟分别如下吗?

void myFunction( int (*A)[][2] );

(*(*A+1))[1] = 2;

6 个答案:

答案 0 :(得分:0)

如果你的名字是:

void myFunction( int A[][2] );

您可以像这样访问数组:

A[1][1] = 2;

当你使用C ++而不是C时,这并没有改变。

答案 1 :(得分:0)

  

我假设实际传递给函数的只是指向第一个元素的指针(与1D数组一样)

这是对的。你的原型相当于:

void myFunction( int (*A)[2] )

  

所以在函数内部我做了一个如...的作业

你不需要这样做。你可以这样做:

A[1][1] = 2;

(它与你所写的相同)。


  

鉴于C ++以这种方式自动通过引用将数组传递给函数......

注意那里的术语;)通过引用传递一些东西在C ++中有一个特定的含义,这不是它!可以准确地说,数组衰减到指向其第一个元素的指针,并且该指针通过值传递。


  

但如果我想这样做,我的函数原型的正确语法和上面赋值的模拟分别如下吗?

没有;那将无法编译。指针必须是完整类型;你需要数组大小信息。所以你的原型必须是这样的:

void myFunction( int (*A)[7][2] )

同样,您可以简化阵列访问:

(*A)[1][1] = 2;

答案 2 :(得分:0)

多维数组在C ++中没有实现为嵌套数组,而是作为连续的块实现,这也是为什么必须静态指定所有维度而不是第一个维度的原因。所以你基本上应该将这样的数组作为带有语法糖的一维数组来处理索引。

答案 3 :(得分:0)

我认为他只是想知道在c ++中传递一个指向多维数组的指针是正确的sintax:

void myFunction( int (*A)[10][2] )
{
    cout<<(*A)[0][0];//prints 123
}
int main()
{
    int A[10][2];
    A[0][0] = 123;
    myFunction(&A);
}

答案 4 :(得分:0)

以下可能会有所帮助:

void myFunction(int (&A)[2][2]) {
    A[1][1] = 2;
}

答案 5 :(得分:0)

你可以在主函数中调用它

myfunction的(安培; myarray中);

并且函数原型是

myfunction(int(* a)[2] [2])