1447391641 发表于 2020-11-30 16:34:30

运行

#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 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不会每次都被重新赋值。

sunrise085 发表于 2020-11-30 17:01:04

#include "stdio.h"
int Square (int i)
{
    return i*i;
}
int main()
{
    int i=0;
    i = Square(i);
    for (; i<4; i++)
    {
      static int i=1;//局部静态变量,只会初始化一次,这个局部变量与第8行的i不是一个变量。
      i += Square(i);
      printf("%d ", i);//这里输出的是局部静态变量i,第一次循环,初始化i为1,i=1+1=2;第二次循环,i=2+4=6;第三次循环,i=6+36=42
    }
    printf("%d \n", i);//这里输出的是第8hang定义的i
}

北冰羊 发表于 2020-11-30 17:02:27

北冰羊 发表于 2020-11-30 16:59
for循环相当于for(i=0;i

循环里的i与static i虽然是同名变量,但是并非同一内存区,编译器会区分
页: [1]
查看完整版本: 运行