传递数组在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()
时, firstarray
和secondarray
被转换为int指针。
printarray(int arg[], ...)
相当于printarray(int *arg, ...)
但是,这不是特定于C ++的。 C将数组名称传递给一个函数具有相同的规则。