Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我不明白y-3的说法_C_Statements - Fatal编程技术网

C 我不明白y-3的说法

C 我不明白y-3的说法,c,statements,C,Statements,为什么y--3语句的行为像y=3?有人能解释一下吗 #include <stdio.h> main(){ int x=-2, y=4, z; y---3; printf("%d",y); } #包括 main(){ int x=-2,y=4,z; y--3; printf(“%d”,y); } C尝试贪婪地读取其标记,即尝试读取和匹配尽可能长的序列。因此,--将被解析为--,这意味着您有y--3 由于您不将结果存储在任何位置,因此唯一相关的位是y--,它将y从

为什么
y--3
语句的行为像
y=3
?有人能解释一下吗

#include <stdio.h>

main(){

   int x=-2, y=4, z;
   y---3;
   printf("%d",y);
}
#包括
main(){
int x=-2,y=4,z;
y--3;
printf(“%d”,y);
}

C尝试贪婪地读取其标记,即尝试读取和匹配尽可能长的序列。因此,
--
将被解析为
--
,这意味着您有
y--3

由于您不将结果存储在任何位置,因此唯一相关的位是
y--
,它将
y
4
减少到
3
,如下所示:

y---3;
解析为:

y-- - 3;
所以这个表达式递减
y
,取
y
的先验值,然后从中减去3。表达式(即1)的结果被丢弃,因为它本身被用作语句。

y--3
y=3
不同

y--3
被解析为
(y--)-3
,减法的最终结果被丢弃。因此,
y--
的唯一副作用被保留下来,从早期的
y
值(即
4
)开始减少
1


因此,
y--n
,其中
n
是任何整数,将为下一个打印语句生成相同的结果。

如果在启用警告的情况下编译此语句,编译器将告诉您(除其他警告外)类似于:

test.c:6:7: warning: value computed is not used [-Wunused-value]
    y---3;
    ~~~^~
在这种情况下,编写得更容易的代码是:

    y-- - 3;
这相当于:

    y - 3;
    y -= 1;

这些语句中的第一条是多余的,因为您正在计算一个值,然后将其丢弃。

更改
y
的初始值,看看会发生什么。有些关联: