注册 登录
编程论坛 C语言论坛

while语句后加分号是--在前和后的区别

Xovery 发布于 2023-01-30 15:51, 1317 次点击
int k=1                       int k=1;
while(- -k);                while(k- -);
printf(“%d”,k);           printf(“%d”,k);     
结果为0                        结果为-1

这是为啥???
3 回复
#2
rjsp2023-01-30 16:16
跟分号没关系,你想问的是 --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自减」之前的值
#3
billliu662023-01-31 16:44
while(--K)判定在后,运算在前。while(k--)判定在前,运算在后。while(k--);当k为0时,退出循环,但减1还得进行。
#4
万家乐2023-02-16 21:41
在第一个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。
1