当我运行此代码时,我得到了答案为5,但我不明白这是如何工作的 根据我自己的理解,这应该是一个无限循环 因为number的值永远不会改变为函数作用域的内部 此函数的输出为5,for循环仅运行一次 我需要了解这里的条件是如何满足的。
#include <stdio.h>
int num=7;
int r();
int main()
{
for(r();r();r())
{
printf("%d",r());
return 0;
}
}
int r()
{
return num--;
}
答案 0 :(得分:1)
执行期间num
会发生什么?
num = 7;
r(); // first argument of for, init nothing → return 7, then num = 6
r(); // second argument of for → return 6, then num = 5
// third argument is done at the end of for, not now
printf("%d",r()); // execute r() → return 5, then num = 4, but print 5
return 0; // exit the current function or the process if it's in the main function
有关信息:
num--; //返回num然后减少num --num; //减少num然后返回num
++运算符也是如此。
答案 1 :(得分:0)
假设我们有for
个循环,其中A
,B
,C
和D
是有效的表达式:
for (A; B; C)
{
D;
}
这相当于以下while
循环:
A;
while (B)
{
D;
C;
}
由于循环中的D
是printf
调用后跟return
语句,循环将只迭代一次(并且C
未执行),然后返回来自将终止程序的main
函数。
至于为什么要打印5
,这是因为在您致电r
之前调用了printf
两次,将其从7
两次减少到5
如果展开循环,它就像
r(); // Initialization in `for` loop
r(); // Condition in `for` loop
printf(...);
return 0; // Terminates the program
答案 2 :(得分:0)
如果您正确缩进代码:
include <stdio.h>
int num = 7;
int r()
{
return num--;
}
int main()
{
for(r(); r(); r()) {
printf("%d", r());
return 0;
}
}
你会发现它不是一个无限循环,因为你是在第一次打印后从它返回。
从thze函数外部看不到对局部变量的更改,但变量num
是一个全局变量。 main
和r
都会看到此全局变量的相同实例。
至于为什么答案是5,将for循环重写为等效的while
循环:
int main()
{
r(); /* init */
while (r()) { /* condition */
printf("%d", r());
return 0;
r(); /* update */
}
}
函数r
返回num
的原始值。减量发生在返回之后。 (当然,它没有:编译器复制,递减并返回副本。)