尝试此代码并按照我的书输出为-10到-1。如何打印这真是让我感到困惑。
#include <stdio.h>
void main()
{
int var = -10;
for(; var; printf("%d\n ", var++));
}
答案 0 :(得分:3)
让我们一步一步地完成这个步骤:
int var
变量初始化为-10
。到目前为止,非常好。
现在我们开始讨论这个有趣的部分:for
循环。我们有一个强大的构造,具有以下形式:
for (/* initialisation-statement */ ; /* condition */ ; /* iteration-statement */)
/* statement or block of code */
使用您的代码,我们没有任何内容可用于初始化语句(int var = -10
可以在此处),var
用于条件,printf("%d\n ", var++)
用于迭代语句。
如果您不熟悉for
循环的方式,这里有一个更原始(但仍然等效)的形式:
{
/* initialisation-statement */;
startloop:
if (/* condition */) {
/* statement or block of code */
/* iteration-statement */;
goto startloop;
}
}
将for(int var = -10; var; printf("%d\n ", var++));
放入此中,我们得到:
{
int var = -10;
startloop:
if (var) {
;
printf("%d\n ", var++);
goto startloop;
}
}
执行printf("%d\n ", var++);
语句时,会将var++
的值打印到stdout
。 ++
运算符的后缀版本会增加该值,但会计算为原始值。
因为var
控制循环,所以只要它评估为true
(非零),它就会保持循环。由于var
从-10
开始增加,因此最终会达到0
并结束循环。
侧面注意:void main()
不是标准配置。请改用int main(void)
或int main(int argc, char *argv[])
。
答案 1 :(得分:1)
这是出于以下原因
var
用作布尔表达式,评估其值,任何非零值用作 true 和零值用作 false 。var++
中的printf("%d\n ", var++)
是var
上应用的后缀运算符。它取当前值,然后将var
递增一。var
达到零(与第一点一起阅读)答案 2 :(得分:1)
这里有一些格式化的代码。请注意,以下代码与您的代码完全相同:
#include <stdio.h>
int main()
{
int var;
for (var=-10; var!=0 ;var++) {
printf("%d\n ", var);
}
return 0;
}
条件var!=0
也将在您的代码中自动评估。在C中,!=0
为true
,0
为false
。
答案 3 :(得分:0)
通常在编程中,除0之外的每个整数(到布尔值)都被解释为布尔true
。
只有0被解释为false
,因此循环在var = 0
处中断,0不会被打印。
另外:如果你在var
放置任何正整数并运行相同的循环,循环将计数无限次,因为它永远不会达到0,除非你等待进入溢出。也就是说,当您向 2,147,483,647 (增量)添加1并获得 -2,147,483,648 时。从那时起var
再次为负但仍在计数,最终你达到0并且循环将会中断。
答案 4 :(得分:0)
首先,var ++表示var = var + 1; 这意味着循环从-10到-1。 因此printf(“%d \ n”,var ++)将var增加1并打印var。 var ++和++ var之间的差别在var ++中,printf首先发生,而不是+1,因为你看到输出从-10到-1。
第二,C中的0表示错误。然后var变为0,循环停止。
循环也可以是(int var = -10; var; printf(“%d \ n”,var ++));这与(; var; printf(“%d \ n”,var ++));
相同