#include<iostream>
using namespace std;
int i;
void inc(int i)
{
i++;
}
int main()
{
for(int i=0;i<10;inc(i))
{
cout<<i;
}
return 0;
}
代码的输出是无限的零。 它是如何产生的
答案 0 :(得分:2)
您通过i
中的值传递inc
(在循环中声明),因此i
实际上并未递增。您需要通过引用传递i
。
要执行此操作,请更改
void inc(int i) {
i++;
}
为:
void inc(int& i) {
i++;
}
这会将i
(引用)的地址传递给inc
,这会增加存储在该地址的值。
这是您的最终代码
#include<iostream>
using namespace std;
int i;//no use of this variale
void inc(int& i) {
i++;
}
int main()
{
for(int i=0;i<10;inc(i))
{
cout<<i;
}
return 0;
}
答案 1 :(得分:1)
你可以这样简单地做到这一点
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;i++)
{
cout<<i;
}
return 0;
}
答案 2 :(得分:0)
让我们重命名一些变量:
#include<iostream>
using namespace std;
int i1;
void inc(int i2)
{
i2++;
}
int main()
{
for(int i3=0;i3<10;inc(i3))
{
cout<<i3;
}
return 0;
}
这是否能说明发生了什么?
没有使用i1
,它完全没有意义。
您递增i2
,但这是一个局部变量,与i3
完全分开。每次循环运行时,调用inc(i3)
,它会创建一个名为i2
的新局部变量,并复制i3
的值(始终为零),递增局部变量,然后变量熄灭范围及其寿命结束。因此,您的inc
函数没有副作用,i3
永远不会更改。
您的函数应为inc(int& i)
,以便通过引用获取其参数并进行修改。