例子:将任意长度的整形数组传递给求和函数sum,返回数组中所有元素之和。
写法1:
#include <iostream>
using namespace std;
int sum(int arr[])
{
int sum = 0;
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
sum += arr[i];
}
return sum;
}
int main()
{
int arr[] = {1,2,3,4};
//int len = sizeof(arr) / sizeof(arr[0]);
int num = sum(arr);
cout << num << endl;
system("pause");
return 0;
}
上面代码的实际上并不能正确的完成任务。
实际上将数组作为函数参数传递时,传递的并不是数组本身,而是地址,具体来说,传递给函数的是数组第一个元素的首地址。如果不指定数组的长度,那么在函数中对于数组的操作可能会越界,即对原本不属于数组的内存进行了修改,这样可能会导致程序出错。
修正后的代码如下(写法2)所示,将数组地址传递给函数的同时,指定了数组的长度和数据类型,有了这三个信息后,函数中就可以由首地址开始,根据数据类型(确定每次偏移的字节数以访问下一个元素)和数组长度,来正确访问数组中每一个元素。
写法2:
#include <iostream>
using namespace std;
int sum(int arr[], int len)
{
int sum = 0;
//int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
sum += arr[i];
}
return sum;
}
int main()
{
int arr[] = {1,2,3,4};
int len = sizeof(arr) / sizeof(arr[0]);
int num = sum(arr, len);
cout << num << endl;
system("pause");
return 0;
}
(当然,当不指定数组长度时,也可通过其他条件来限定数组长度,以避免出现越界情况,例如通过特殊终止字符来实现。)
最后
以上就是朴素冥王星最近收集整理的关于C++中数组作为函数参数时为什么要传入数组长度的全部内容,更多相关C++中数组作为函数参数时为什么要传入数组长度内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复