如何将数组数组传递给函数?

时间:2013-12-03 23:55:22

标签: c++

我有一个数组数组,我需要将它传递给一个函数。我该怎么做?

int mask[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 

功能签名怎么样?

我认为它看起来像这样

void foo(int mask[3][3])

void foo(int **mask)

但似乎我错了,我找不到一个例子。

1 个答案:

答案 0 :(得分:3)

在C ++中传递数组最不令人惊讶的方法是参考:

void foo(int (&mask)[3][3]);

你的第一次尝试

void foo(int mask[3][3])

应该有效,但它会在内部转换为

void foo(int (*mask)[3])

sizeof和其他需要“真正”数组的事情有意想不到的影响。

你的另一个想法int**不起作用,因为二维数组与指针数组不同,即使a[i][j]表示法同样适用于两者。

如果您不想与该功能共享内容(并查看其可能进行的更改),则上述任何内容都无济于事。按值传递指针仍然共享目标对象。在这种情况下,您需要将数组放在另一个对象中,例如std::array<std::array<int,3>,3>