#1关于函数参数变量的思考
来源:互联网 发布:ubuntu 用户提权 编辑:程序博客网 时间:2024/06/05 18:40
先放下代码
#include <iostream>
using namespace std;float fx(int);
int const i=10;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int main() {
cout<<fx(i+1);//计算数组中10个数和的平均数
}
float fx(int i){
float avg=0;
for(int x=0;x<i;x++){
avg+=a[x];
}
return avg/i;
}
========================
这段代码是做作业时出现问题的简化版,运行得出来的结果却是5,并不是正确答案5.5,到底是出了什么问题呢?
问题其实很简单,就是出在fx()函数中的return avg/i; 在这之前我已经定义了常变量i=10,不过在这个函数体中的参数名也是i。
当时在写代码的时候就习惯性的把i当作10使用了,如果在那句代码前加上一句cout<<i<<endl;就会发现此时的i就是引用fx()函数的参数i+1,也就是说此时的i是11,并不是10。
========================
总结
虽然这看似是一个小问题,不过在我看来,这个不好的习惯会影响工程量大的工作。这个特别傻的bug让我找了将近一个钟。建议是不要把函数的参数名与经常使用的变量名写成同一个词,不然出现这种低级错误将要耗费非常多的时间。
阅读全文