2012-01-07 123 views
0

当我将2D数组传递给函数或二维数组时,是否需要放置“&”,自动按照1Ds的引用进行操作。传递多维数组C++

void fnc (int& arr[5][5]) { 
} 
+3

1D数组不会自动通过引用传递... – 2012-01-07 16:24:12

+1

int&arr [5] [5]' - >'arr'是两个int类型的暗淡数组,你想要那个吗? – 2012-01-07 16:27:18

+0

我的意思是,但在我的代码中,我感兴趣地通过值传递,但函数结束后,arr的值发生了变化。 – Shibli 2012-01-07 16:29:25

回答

2

它将按值传递,如果你不通过引用&指定通。

但是数组衰减为指针,所以你基本上是按值传递一个指针,这意味着它指向的内存将是相同的。

通常而言,修改arr函数内部会修改原始的arr(不会创建副本)。

此外,一维数组也不会被自动“通过引用”传递,它只是因为它们衰变为指针而出现。

+0

所以,如果我想修改传递的数组,我需要为2D数组放置“&”吗? – Shibli 2012-01-07 16:33:25

+0

@Shibli不,你不应该。再次阅读答案。 – yoni 2012-01-07 16:35:17

+0

@Shibli,根本不是我说的。一个直接的答案是你可以通过它没有参考,它仍然会在外面修改。但试着去理解答案,因为从长远来看,这将会更有帮助。 – 2012-01-07 16:37:36

2

如果你真的想通过参考阵列传递将需要:

void fnc(int (&arr)[5][5]); 

没有内部括号,如阿努比斯先生说,你会试图通过引用数组这是不可能的有帮助。

通常一个只会写

void fnc(int arr[][5]); 

(你可以写arr[5][5],但前5个被忽略,这可能会导致混乱。)

这传递数组的地址,而不是阵列本身,我认为这是你想要达到的目标。

您还应该考虑向量或其他更高级别数据结构的向量;原始数组对于粗心大意有许多陷阱。