数组作为函数参数传递
数组作为函数参数传递时,传入的是数组首地址,并非数组本身。今天总算理解了这一点。写了一个打印数组元素的函数,代码如下:
void print1(int arr[]) {
int len = sizeof(arr) / sizeof(arr[0]);
cout << sizeof(arr)<<endl;
for (int i = 0;i < len;i++) {
cout << arr[i] << " ";
}
}
main函数:
int arr[5] = { 1,2,3,4,5 };
print1(arr);
运行结果:
显然,并没有打印出数组所有元素。根据输出,sizeof(arr)=4;
sizeof(arr)/sizeof(arr[0])=1。很明显,如果传入的是数组本身,sizeof(arr)的值一定远大于4。传入的是地址的话,则刚好是4个字节。
再看我写的第二个打印函数:
void print2(int arr[], int len) {
for (int i = 0;i < len;i++) {
cout << arr[i] << " ";
}
}
main函数
int arr[5] = { 1,2,3,4,5 };
int len = sizeof(arr) / sizeof(arr[0]);
cout << "数组长度:"<<len<<" 数组所占空间:"<< sizeof(arr)<<endl;
print2(arr, len);
运行结果:
结果准确无误。
总结:当数组作为函数参数传递时,不能在函数中用sizeof求数组长度。