鱼C论坛

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

[已解决]运行

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

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

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

x
#include "stdio.h"
int Square (int i)
{
return i*i;
}
int main()
{
int i=0;
i = Square(i);
for (; i<3; i++)
{
static int i=1;
i += Square(i);
printf("%d ", i);
}
printf("%d \n", i);
}



请问这个程序怎么运行的呢,for那边没太看懂,不知道第三个结果怎么求出来的
最佳答案
2020-11-30 17:01:04
  1. #include "stdio.h"
  2. int Square (int i)
  3. {
  4.     return i*i;
  5. }
  6. int main()
  7. {
  8.     int i=0;
  9.     i = Square(i);
  10.     for (; i<4; i++)
  11.     {
  12.         static int i=1;//局部静态变量,只会初始化一次,这个局部变量与第8行的i不是一个变量。
  13.         i += Square(i);
  14.         printf("%d ", i);//这里输出的是局部静态变量i,第一次循环,初始化i为1,i=1+1=2;第二次循环,i=2+4=6;第三次循环,i=6+36=42
  15.     }
  16.     printf("%d \n", i);//这里输出的是第8hang定义的i
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-30 16:59:38 | 显示全部楼层
for循环相当于for(i=0;i<3;i++) 循环3次
(1) i=1; i+=Square(1)  (结果是2)  
(2) i=2; i+=Square(2) (结果是6)
  (3)   i=6; i+=Square(6)  (结果为42)
因为是static i,所以i不会每次都被重新赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-30 17:01:04 | 显示全部楼层    本楼为最佳答案   
  1. #include "stdio.h"
  2. int Square (int i)
  3. {
  4.     return i*i;
  5. }
  6. int main()
  7. {
  8.     int i=0;
  9.     i = Square(i);
  10.     for (; i<4; i++)
  11.     {
  12.         static int i=1;//局部静态变量,只会初始化一次,这个局部变量与第8行的i不是一个变量。
  13.         i += Square(i);
  14.         printf("%d ", i);//这里输出的是局部静态变量i,第一次循环,初始化i为1,i=1+1=2;第二次循环,i=2+4=6;第三次循环,i=6+36=42
  15.     }
  16.     printf("%d \n", i);//这里输出的是第8hang定义的i
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-30 17:02:27 | 显示全部楼层
北冰羊 发表于 2020-11-30 16:59
for循环相当于for(i=0;i

循环里的i与static i虽然是同名变量,但是并非同一内存区,编译器会区分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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