这是无操作或其他什么?

时间:2011-09-16 04:08:46

标签: c

#include<stdio.h>

int i;
int increment(int i)
{
    return ++i;
}

int main()
{
    for(i=0;i<10;increment(i))
    {
        printf("%d",i);
    }
    return 0;
}

此处输出为000000.即发生无限lopp。

我想知道这是由于没有操作而发生,因为我们没有变量来存储++ i的值(由增量函数返回),或者是由于其他原因? 。请解释。

2 个答案:

答案 0 :(得分:12)

是的,这是一个无操作。对increment的调用不会改变任何内容,因为值是按值传递的。

i的本地定义会影响全局定义。因此,仅使用i的本地定义,并且i的全局定义不受在变量的本地副本上执行的增量的影响。

答案 1 :(得分:2)

您递增的变量是传递给increment的参数的本地副本。您已同时命名i,因此我可能无法如此清楚,但重点是i中的increment与全局定义的{{1}}不同。