数组作为函数参数传递
数组作为函数参数传递时,传入的是数组首地址,并非数组本身。今天总算理解了这一点。写了一个打印数组元素的函数,代码如下:
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求数组长度。
如果觉得《数组作为函数参数传递》对你有帮助,请点赞、收藏,并留下你的观点哦!