标题:while语句后加分号是--在前和后的区别
只看楼主
Xovery
Rank: 2
等 级:论坛游民
帖 子:29
专家分:14
注 册:2022-10-22
结帖率:66.67%
已结贴  问题点数:5 回复次数:3 
while语句后加分号是--在前和后的区别
int k=1                       int k=1;
while(- -k);                while(k- -);
printf(“%d”,k);           printf(“%d”,k);     
结果为0                        结果为-1

这是为啥???
搜索更多相关主题的帖子: 结果 int 区别 语句 while 
2023-01-30 15:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:2 
跟分号没关系,你想问的是 --k 与 k-- 的区别吧?

int k = 1;
int x = --k;
执行完 k==0, x==0

int k = 1;
int x = k--;
执行完 k==0, x==1

也就是 --k 与 k-- 的「副作用」都是使得k自减一,但 --k 的表达式值是「k自减」之后的值,而 k-- 的表达式值是「k自减」之前的值
2023-01-30 16:16
billliu66
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:4
注 册:2020-3-5
得分:3 
while(--K)判定在后,运算在前。while(k--)判定在前,运算在后。while(k--);当k为0时,退出循环,但减1还得进行。
2023-01-31 16:44
万家乐
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:0
注 册:2023-2-15
得分:0 
在第一个while循环中,分号位于while语句的末尾,因此它将被视为一个空循环体。在这种情况下,while语句将永远不会终止,因为条件始终为真,即-k始终为真(假设k是正整数)。因此,程序将进入一个无限循环,k不会发生变化,printf语句将打印出初始值1,即结果为1。

在第二个while循环中,分号位于表达式k--的末尾,该表达式将在每次迭代时执行。该表达式的行为是将k的值减1,并返回减1后的值。因此,当k的值为1时,k--表达式将返回0,并且while循环将在第一次迭代后终止。在此之后,printf语句将打印出k的当前值,即-1。需要注意的是,由于后置--运算符是在k被使用之后再进行递减的,因此在while循环中,k的值在执行条件检查之前将始终保持为1。
2023-02-16 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511195-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.196066 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved