#include <stdio.h>
int f1(){
static int val=11;
return --val;
}
int main()
{
for( f1(); f1(); f1()){
printf("%d",f1());
}
}
程序的输出是:
8 5 2
有人能解释一下for(f1();f1();f1())
是做什么的吗?
答案 0 :(得分:2)
#include <stdio.h>
int foo(void) {
static int val = 11;
return --val;
}
int main(void) {
int (*f1)(void) = foo; //4 function pointers to the same function
int (*f2)(void) = foo;
int (*f3)(void) = foo;
int (*f4)(void) = foo;
for (f1(); f2(); f3()) {
printf("%d", f4());
}
}
执行是这样的
val = 11 f1() 10 f2() 9 "true" f4() print 8 f3() 7 f2() 6 "true" f4() print 5 f3() 4 f2() 3 "true" f4() print 2 f3() 1 f2() 0 "false"
答案 1 :(得分:0)
C for 循环包含 3 个项目:
初始化
条件
增量
for 循环运行直到条件等于 0 或 null。
您进入循环,它在初始化时第一次调用 f1()
,因此 val 等于 10
在每次迭代中,它将调用 f1()
三次,以检查条件、执行增量部分和 printf 调用。因此,在每次迭代中,我们有 val = val - 3
一旦 val == 0
退出循环。
请注意,它仅起作用,因为 val
是静态的,因此不会在每次调用 f1()
时重新初始化
答案 2 :(得分:0)
为了更容易理解,我将讨论这样的函数:
for (A(); B(); C()) {
printf("%d", D());
}
所以理解所有 A B C 和 D 都是对 f1() 的调用,但我希望能够区分它们。
首先要了解的是 for
的“参数”是如何工作的。
然后我们可以理解您的程序将按以下顺序执行: