只是想知道代码实际上是如何运行的

时间:2015-01-27 13:42:43

标签: c++

#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;
}

代码的输出是无限的零。 它是如何产生的

3 个答案:

答案 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),以便通过引用获取其参数并进行修改。