超级甲鱼粉 发表于 2020-4-19 11:14:11

c语言初学者求助

#include <stdio.h>
int square(int i)
{
        return i*i;
}
int main()                                                               为什么这个程序可以一开始设一个变量i,还可以在循环里又设一个静态变量i,静态变量的值
{                                                                            还不受外边i的影响,还与for条件里的i能区分开,只在循环里起作用,等循环退出了以后静态变量i
        int i=0;                                                          又不起作用了。这是什么原理,静态变量不是main函数走完了以后才释放吗,printf怎么区分后面的
        i = square(i);                                                i是静态变量还是自动变量?有点蒙,求指点 ,十分感谢。                                       
        for(;i<3;i++)
        {
                static int i = 1;
                i += square(i);
                printf("%d,"i);
        }
        printf("%d\n",i);
        return 0;
}

永恒的蓝色梦想 发表于 2020-4-19 11:30:53

先是外部i=0,进入循环后,出现一个静态局部变量i,你可以把它当作另一个变量j
现在的是copy内i=1,然后i+=s(i),变成i=2了,zd输出2
然后外部i=2,判断外部i<3,再次进入循环,此时的内部i已经等于2了,继续使用2值
i+=s(i)后,i=6,输出6
接下来外部i=4,判断外部i<3,跳出循环,输出外部i是4百度的解释
不过谁会这么写代码啊……

倒戈卸甲 发表于 2020-4-19 11:44:14

变量作用范围有两个要点,一是基本原则就近生效,二是作用范围以代码块为基本范围。main函数中定义了局部变量i,之后没有同名变量i能够覆盖它,那么那么局部变量i会在整个main函数中生效。只不过,for循环的语句体有一个{}圈起来来的代码块,这种代码块意味着独立的小王国。这里面定义了一个同名的静态变量i,那么根据就近原则,这个新定义的静态i会在for循环的语句体{}中始终生效。

love_qj 发表于 2020-4-19 15:03:37

作用域不一样吧,好比强龙压不住地头蛇,楼上正解
页: [1]
查看完整版本: c语言初学者求助