【发布时间】:2018-03-09 06:36:37
【问题描述】:
我正在查看我在教科书中阅读的一些代码来为自己测试运行,这里是:
#include <iostream>
#include <fstream>
using namespace std;
const double PI = 3.1415926535897932;
void area_of_circle(const double R, double& L, double& A);
int main() {
const int N = 10;
double R[N];
double area, perimeter;
int i;
for (i = 0; i < N; i++) {
cout << "Enter radius of circle: ";
cin >> R[i];
cout << "i= " << (i+1) << " R(i)= " << R[i] << "\n";
}
ofstream myfile ("AREA.txt");
for (i = 0; i < N; i++){
area_of_circle(R[i], perimeter, area);
myfile << (i+1) << ") R= " << R[i] << " perimeter= "
<< perimeter << "\n";
myfile << (i+1) << ") R= " << R[i] << " area= "
<< area << "\n";
}
myfile.close();
}
void area_of_circle(const double R, double& L, double& A) {
L = 2.0*PI*R;
A = PI*R*R;
}
我所做的与作者所做的不同之处在于没有引用我的 const double R 参数。他在 area_of_circle 函数中包含了 & 引用符号 (const double& R)。我运行代码尝试使用和不使用参考符号,我收到了相同的结果。
基本上我的问题是,如果作者都给出相同的答案,为什么还要包含它?我选择不包含它,因为我的理解是,如果 R 在整个函数计算过程中没有变化,为什么要包含它。
【问题讨论】:
-
你是对的。而且你的教练给这个函数命名得很糟糕。
-
@liliscent 啊哈!那个也是!谢谢编辑:我的意思是作者,而不是讲师,哎呀!
-
你真的没有参考就试过了吗?如果类型中没有 &,参数是“按值”传递的,并且仅在函数堆栈上进行修改,因此计算值在 area_of_circle 函数之外将不可用。在 C 中,只有两种方法可以从函数返回值: 1. 将其作为函数返回类型返回(在您的情况下这是不可能的,因为函数是 void)。 2. 通过引用传递参数。
-
@juanchopanza 为什么你说上面的版本不起作用,只要 R 没有被修改,这段代码似乎可以工作
标签: c++ reference pass-by-reference