C++ 传递多维数组c++;

C++ 传递多维数组c++;,c++,multidimensional-array,reference,C++,Multidimensional Array,Reference,当我将2D数组传递给函数时,是否需要放置“&”,或者2D数组通过引用自动放置为1Ds void fnc (int& arr[5][5]) { } 如果不指定“按引用传递”&,它将按值传递 但是数组会衰减为指针,因此基本上是按值传递指针,这意味着指针指向的内存将是相同的 通常,在函数中修改arr将修改原始arr(不创建副本) 此外,1D数组也不会通过引用“自动”传递,因为它们会衰减为指针。如果不指定通过引用传递,则会通过值传递 但是数组会衰减为指针,因此基本上是按值传递指针,这意味着指针

当我将2D数组传递给函数时,是否需要放置“&”,或者2D数组通过引用自动放置为1Ds

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

如果不指定“按引用传递”
&
,它将按值传递

但是数组会衰减为指针,因此基本上是按值传递指针,这意味着指针指向的内存将是相同的

通常,在函数中修改
arr
将修改原始
arr
(不创建副本)


此外,1D数组也不会通过引用“自动”传递,因为它们会衰减为指针。如果不指定通过引用传递,则会通过值传递

但是数组会衰减为指针,因此基本上是按值传递指针,这意味着指针指向的内存将是相同的

通常,在函数中修改
arr
将修改原始
arr
(不创建副本)


此外,1D数组也不是通过引用“自动”传递的,因为它们会衰减为指针。如果确实要通过引用传递数组,则需要:

void fnc(int (&arr)[5][5]);
正如阿努比斯先生所说,如果没有内括号,你将试图传递一系列参考资料,而这些资料不太可能有帮助

通常情况下,人们只会写信

void fnc(int arr[][5]);
(您可以编写
arr[5][5]
,但忽略前5个,这可能会导致混淆。)

这将传递数组的地址,而不是数组本身,我认为这正是您试图实现的


还应该考虑向量或其他高级数据结构的向量;原始数组有许多陷阱供粗心的人使用。

如果您确实想通过引用传递数组,则需要:

void fnc(int (&arr)[5][5]);
正如阿努比斯先生所说,如果没有内括号,你将试图传递一系列参考资料,而这些资料不太可能有帮助

通常情况下,人们只会写信

void fnc(int arr[][5]);
(您可以编写
arr[5][5]
,但忽略前5个,这可能会导致混淆。)

这将传递数组的地址,而不是数组本身,我认为这正是您试图实现的


还应该考虑向量或其他高级数据结构的向量;原始数组有许多陷阱供不小心者使用。

1D数组不会自动通过引用传递…
int&arr[5][5]
->
arr
是int-ref类型的两维数组,你想要吗?我的意思是,但有趣的是,在我的代码中,我按值传递,但在函数结束后,arr的值变了。1D数组会自动传递数组的第一个单元格的地址,它是引用like@Mr.Anubis:的确如此。这样的事根本不存在!1D数组不是通过引用自动传递的…
int&arr[5][5]
->
arr
是int-ref类型的两维数组,您想要吗?我的意思是,但有趣的是,在我的代码中,我通过值传递,但在函数结束后,arr的值会发生更改。1D数组会自动传递数组第一个单元格的地址,这是参考资料like@Mr.Anubis:的确如此。这样的事根本不存在!那么,如果我想修改传递的数组,我需要为2D数组添加“&”吗?@Shibli这根本不是我说的。一个直截了当的答案是,你可以通过它而不需要参考,它仍然会在外部被修改。但是试着理解答案,因为从长远来看,它会更有帮助。那么,如果我想修改传递的数组,我需要为2D数组添加“&”吗?@Shibli我根本不是这么说的。一个直截了当的答案是,你可以通过它而不需要参考,它仍然会在外部被修改。但是试着理解答案,因为从长远来看,它会更有帮助。