#include <stdlib.h>
#include <stdio.h>
int main()
{
static int i = 5;
if(--i){
main();
printf("%d ",i);
}
return 0;
}
上面的代码的输出是0 0 00。我首先知道为什么它是0,但是为什么0又打印了三遍?
答案 0 :(得分:3)
回想一下,import csv
pf = open("yourcsv.csv", "r")
read = csv.reader(pf)
male_count = 0
for r in read:
if r[1] == 'Male':
male_count += 1
pf.close()
print("Male count: {}".format(male_count))
变量在所有对static
的调用之间共享。然后考虑递归执行的代码:
main
答案 1 :(得分:1)
症结在于,由于i
为static
,因此所有内容都设置了相同的i
变量。并且main
递归调用自身,直到i
是一个伪造的值。
int main()
{
static int i = 5;
if(--i){ // i is now 4
main();
{
if(--i){ // i is now 3
main();
{
if(--i){ // i is now 2
main();
{
if(--i){ // i is now 1
main();
{
if(--i){ // i is now 0, which is false, so main isn't called
}
}
printf("%d ",i); //print "0"
}
}
printf("%d ",i); //print "0"
}
}
printf("%d ",i); //print "0"
}
}
printf("%d ",i); //print "0"
}
return 0;
}
答案 2 :(得分:0)
变量i
是静态的。因此,在程序第一次到达第5行时变量就获得了值,而第5行不再执行了。并且由于变量i
是静态的,因此每次执行main
时,它都会访问之前访问过的相同i
。并且如果任何函数调用更改了i
的值,则其他函数调用中的值也会更改。因此,虽然i
的值不是0
,但调用了主函数,并且当其值等于0
时,主函数返回并且printf()
开始执行和打印i
,即0
答案 3 :(得分:0)
像这样
static int i = 5
if (--i) //i == 4{
if (--i) //i == 3{
if(--i) // i ==2{
if (--i) // i==1{
if (--i) //i==0 this means i==false{
}
print (i) //i ==0
}
print(i) //i ==0
}
print(i) //i==0
}
print(i) //i==0
return 0
这是执行代码时发生的情况, 4个递归调用,一旦调用结束,它将打印变量i,该变量是静态的,因此对于所有调用,它实际上是相同的。
为什么要打印4张而不是5张?
因为-用作前缀是这样的
i = i-1
if (i)
用作-后缀的
if (i)
i = i-1
答案 4 :(得分:0)
当我被声明为function autoScroll(){
console.log("running")
}
// save a reference to the interval handle
let interval = window.setInterval(autoScroll, 100);
// cancel interval after 1 second (1000 ms)
setTimeout(() => clearInterval(interval), 1000)
时,它将在static
上(如果删除静态变量,它将在堆栈上,并且在每个堆栈帧中将具有不同的值,但是这里i = 5每次在启动时都会初始化如果删除data segment
,则程序将进入无限函数调用循环,因为static
永远不会为零,因此递归不会终止)
,由于i
是i
,因此您所做的任何更改都将保留在函数调用中。
当static
达到零时,递归以i
变为false结束,当它转弯时,返回时将打印最终值i,即零