我一直在阅读Bjarne的《编程原理》一书,并尝试过完成此任务。该任务希望用户创建一个专门对每个数字求平方的程序,而无需使用*
运算符。听起来很容易吧?但是,在添加以下代码的同时:
#include "../../std_lib_facilities.h"
int square(int value, int ratio);
int main()
{
for (int i = 1; i < 100; ++i)
{
cout << i << " Squared = " << i << " * " << i << " (" << square(i, i) << ")\n";
}
}
int square(int value, int ratio)
{
for (int i = 1; i < ratio; ++i)
{
value += value;
}
return value;
}
返回的值被彻底更改(直到它们离开int
变量的范围并返回0)。仅当我添加temp_value
并返回如图所示的temp_value
时,此情况才会更改:
#include "../../std_lib_facilities.h"
int square(int value, int ratio);
int main()
{
for (int i = 1; i < 100; ++i)
{
cout << i << " Squared = " << i << " * " << i << " (" << square(i, i) << ")\n";
}
}
int square(int value, int ratio)
{
int temp_value = value;
for (int i = 1; i < ratio; ++i)
{
temp_value += value;
}
return temp_value;
}
这可能很简单,但是我似乎无法弄清楚为什么需要这样做,除非在将其解析为函数时发生某种形式的对象操纵。
答案 0 :(得分:2)
对于square(4, 4)
,您的第一个代码是:
4 + 4 = 8
8 + 8 = 16
16 + 16 = 32
您的第二秒:
4 + 4 = 8
8 + 4 = 12
12 + 4 = 16
我让你弄清楚为什么不自己破坏所有乐趣