参考:https://www.cnblogs.com/gongpixin/p/5172012.html
本文需要解决C++中关于数组的2个问题:
1. 数组作为函数参数,传值还是传址? : 传址。
2. 函数参数中的数组元素个数能否确定? :不能确定。
当我们直接将数组a作为参数调用testArrayArg()时,实参与形参的地址均是0012FF4C。并且,在testArrayArg()中将a[3]的值修改为10后,返回main()函数中,a[3]的值也已经改变。这些都说明C++中数组作为函数参数是传址。
#include <iostream>
using namespace std;
void testArrayArg(int a[])
{
cout << endl;
cout << "in func..." << endl;
cout << "array address: " << a << endl;
cout << "array size: " << sizeof(a) << endl;
cout << "array element count: " << sizeof(a) / sizeof(a[0]) << endl;
cout << "changing the 4th element's value to 10." << endl;
a[3] = 10;
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
cout << "in main..." << endl;
cout << "array address: " << a << endl;
cout << "array size: " << sizeof(a) << endl;
cout << "array element count: " << sizeof(a) / sizeof(a[0]) << endl;
testArrayArg(a);
cout << endl << "the 4th element's value: " << a[3] << endl;
return 0;
}
特别需要注意的是,在main()中,数组的大小是可以确定的。
但作为函数参数传递后,其大小信息丢失,只剩下数组中第一个元素的信息。
这是因为C++实际上是将数组作为指针来传递,而该指针指向数组的第一个元素。至于后面数组在哪里结束,C++的函数传递机制并不负责。