传递数组在C ++中的function

#include <iostream> using namespace std; void printarray (int arg[], int length) { for (int n = 0; n < length; n++) { cout << arg[n] << " "; cout << "\n"; } } int main () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray(firstarray, 3); printarray(secondarray, 5); return 0; } 

此代码工作,但我想了解如何传递数组。

当从main函数对printarray函数进行调用时,数组的名称正在传递。 数组的名称引用数组的第一个元素的地址。 这如何等同于int arg[]

语法

 int[] 

 int[X] // Where X is a compile-time positive integer 

是完全一样的

 int* 

当在函数参数列表中(我省略了可选名称)。

此外,数组名称在传递给函数时衰减为指向第一个元素的指针(而不是通过引用传递),因此int firstarray[3]int secondarray[5]衰减为int* s。

同样的情况是,当你使用相同的索引时,数组解引用和下标语法的指针解引用(下标语法是x[y] )在同一个元素上产生一个左值。

这三条规则相结合,使代码合法,工作如何您期望; 它只是传递指向函数的指针,以及在数组衰减到指针之后您不知道的数组长度。

我只是想添加这个,当你访问数组的位置

arg[n]

是相同的

*(arg + n)表示从de arg地址开始的偏移量n。

所以arg[]将会是*arg

当传递给printarray()时, firstarraysecondarray被转换为int指针。

printarray(int arg[], ...)相当于printarray(int *arg, ...)

但是,这不是特定于C ++的。 C将数组名称传递给一个函数具有相同的规则。