c++ - 在 C++ 函数中通过引用传递
问题描述
我正在编写一个简单的程序来使用函数计算 6^5。这是我的代码
#include <iostream>
using namespace std;
int raiseToPower(int &base, int exponent){
for (int i = 1; i < exponent; i = i + 1){
base= base * base;
}
return base;
}
int main() {
int base = 6;
cout << "6^5 is " << raiseToPower(base, 5)<< endl;
return 0;
}
结果是
6^5 is -683606016
而不是 7776
你们能解释一下为什么我得到这个结果吗?我不是在寻找另一种编写此代码的方法。我知道有更简单的方法,但我试图了解出了什么问题
解决方案
你为什么使用通过引用传递。尽可能多地设置const
可以减少犯错的几率:
#include <iostream>
using namespace std;
int raiseToPower(const int base, const int exponent) {
int result = base;
for (int i = 1; i < exponent; i = i + 1){
result = result * base;
}
return result;
}
int main() {
int base = 6;
cout << "6^5 is " << raiseToPower(base, 5)<< endl;
return 0;
}
如果它必须通过引用传递,您可以这样做:
#include <iostream>
using namespace std;
void raiseToPower(const int base,
const int exponent,
int &result)
{
result = base;
for (int i = 1; i < exponent; i = i + 1){
result = result * base;
}
}
int main() {
int base = 6;
int result;
raiseToPower(base, 5, result);
cout << "6^5 is " << result << endl;
return 0;
}
推荐阅读
- java - PDFBox EOFException:设置文本字段值时为空
- sql-server - microsoft sql server 2014 全文搜索下划线的断字行为
- python - PyQt中QGridLayout内的动画几何
- java - 如何使用 void 方法为客户端服务创建单元测试?
- linux - 在 Linux 中禁用 tcp 校验和验证
- python - 无法获得 new_title 动作
- java - 逆时针方向的螺旋矩阵
- python - Pands - 错误:数字列上的“没有要聚合的数字类型”
- java - 尝试匹配列表中的输入时如何生成异常
- linux - 如何安装特定版本的 libhwloc5