#include "stdio.h"
int main()
{
int k=10;
while(k=0)
k=k-1;
printf("%d\n",k);
return 0;
}
代码如上:一开始觉得是这是一段无限循环代码,但运行之后发现有输出,为0
开始思考为什么会有输出。后来多试了几段,代码和结果如下。
#include "stdio.h"
int main()
{
int k=10;
while(k=1)
k=k-1;
printf("%d\n",k);
return 0;
}
这段无输出,为无限循环。
#include "stdio.h"
int main()
{
int k=10;
while(k==0)
k=k-1;
printf("%d\n",k);
return 0;
}
这段不执行while,输出为10。
#include "stdio.h"
int main()
{
int k=10;
while(k==10)
k=k-1;
printf("%d\n",k);
return 0;
}
这段执行一次,输出为9。
上面三段都是顺着逻辑的,很好理解,是赋值类与关系式的区别。
但为什么给k赋值为0的时候会有输出呢?
思索半天后我猜想如下:k=0先给k赋值为0,并且使k=0这个表达式的值为0,于是while后面的表达式为0,跳出循环。
为了验证猜想编了如下代码:
#include "stdio.h"
int main()
{
int k=10;
printf("%d\n",k=0);
return 0;
}
结果输出为0,满意退出~
最后总结出自己一直原来忽略的一点:赋值表达式的值=被赋值变量的值
文章通过分析不同C语言代码示例,解释了赋值操作符`=`与等于判断操作符`==`的区别,特别是在while循环条件中的应用。当使用`k=0`作为循环条件时,由于赋值操作先执行,导致k变为0,使得循环条件立即变为false,因此有输出。而其他情况如`k==0`或`k==10`则遵循预期的循环逻辑。作者强调了理解赋值表达式自身返回值的重要性。

被折叠的 条评论
为什么被折叠?



