我有一个数组数组,我需要将它传递给一个函数。我该怎么做?
int mask[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
功能签名怎么样?
我认为它看起来像这样
void foo(int mask[3][3])
或
void foo(int **mask)
但似乎我错了,我找不到一个例子。
答案 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>