函数调用for循环和静态变量

时间:2019-02-09 16:53:33

标签: c

#include <stdio.h>  

int main() {

    int r() {
        static int num = 7;
        return num--;
    }

    for(r(); r(); r())
        printf("%d",r());

    return 0;
}

输出为52。我如何获取输出是我所不知道的,这个问题我学到的关于静态的知识完全错了。

2 个答案:

答案 0 :(得分:0)

#include <stdio.h>

int r(){
  static int num = 7;
  return num--;
}

int main()
{
  for(r();r();r())
    printf("%d",r());

 return 0;
}

静态变量就像全局变量(我的意思是不在堆栈中),但仅对函数 r

可见

结果为52,因为它先打印5,然后再打印2

  • num 的初始值为7
  • for 第一次调用 r for 的初始部分),因此 num 递减变为6,而 r 一无所获返回7,
  • 执行了测试,并且 num 再次递减为5,并且由于返回6而不是0,因此 for 继续,
  • 现在 print 再次通过将 num 递减为4的调用来完成,结果5被打印
  • r 称为( for 的修改部分),将 num 递减为2,然后不返回3
  • 再次将 num 递减为2并返回3!= 0,循环继续进行
  • 再次
  • 打印,再次调用将 num 递减为1,并打印结果2
  • r 称为( for 的修改部分),将 num 递减为0,然后不返回1
  • 执行测试, num 再次递减为-1,并且由于 r 返回0,因此循环停止

答案 1 :(得分:0)

首次运行r()时,它将返回7,下次运行6,依此类推。
r()的值为0时,for循环将停止。
代码流为:

r() // 7 [1st expression in the for loop]
if (!r()) stop for loop; // 6, so goes into for loop [2nd expression in the for loop]
print (r()) // 5
r() // 4 [3rd expression in the for loop]
if (!r()) stop for loop // 3, continues again
print (r()) // 2
r() // 1 [3rd expression in the for loop]
if (!r()) stop for loop // 0 so exits the for loop

它首先打印5,然后打印2(没有换行符),因此输出为52。