鱼C论坛

 找回密码
 立即注册
查看: 685|回复: 3

[已解决]c语言初学者求助

[复制链接]
发表于 2020-4-19 11:14:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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:44:14
变量作用范围有两个要点,一是基本原则就近生效,二是作用范围以代码块为基本范围。main函数中定义了局部变量i,之后没有同名变量i能够覆盖它,那么那么局部变量i会在整个main函数中生效。只不过,for循环的语句体有一个{}圈起来来的代码块,这种代码块意味着独立的小王国。这里面定义了一个同名的静态变量i,那么根据就近原则,这个新定义的静态i会在for循环的语句体{}中始终生效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
百度的解释
不过谁会这么写代码啊……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 11:44:14 | 显示全部楼层    本楼为最佳答案   
变量作用范围有两个要点,一是基本原则就近生效,二是作用范围以代码块为基本范围。main函数中定义了局部变量i,之后没有同名变量i能够覆盖它,那么那么局部变量i会在整个main函数中生效。只不过,for循环的语句体有一个{}圈起来来的代码块,这种代码块意味着独立的小王国。这里面定义了一个同名的静态变量i,那么根据就近原则,这个新定义的静态i会在for循环的语句体{}中始终生效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-19 15:03:37 | 显示全部楼层
作用域不一样吧,好比强龙压不住地头蛇,楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 06:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表