hanyf 发表于 2024-1-5 16:07:16

条件运算

在定义 a,b 的时候,对 a、b 进行了赋值,然后,又在第二句中再次对 a、b 进行了赋值,这样做有意义吗
例如
int a=2,b=7;
计算下列表达式的值
a=4,b=1,a>b?++a:++b;
a,b的值是只看第二次赋值吗?
第一句的定义赋值有什么意义吗?

FishC 发表于 2024-1-5 16:08:24

在这个例子中,第一句的定义赋值是有意义的。它定义并初始化了变量a和b,使得在后面的代码中可以使用它们。

在表达式a=4,b=1,a>b?++a:++b;中,实际上只有条件运算符右边的表达式会生效并执行计算。条件运算符的工作原理是,根据条件判断的结果选择执行表达式的部分。如果条件成立(即a>b),则执行++a;如果条件不成立,则执行++b。最终,变量a或b会根据执行的表达式进行递增操作。

因此,在这个例子中,最终a的值是5,b的值是1。第一次赋值的结果并没有影响到最后的计算结果,只有第二次赋值才起作用。但是第一次赋值仍然是有意义的,因为它确保了变量a和b在后续的代码中有初始值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-1-5 16:27:29

         你说的很对,对一个变量而言,所有没有得到使用的赋值(没有出现在表达式的右边或函数的参数中)都是无效的赋值。

liyifeng295641 发表于 2024-1-5 19:41:36

你可以这样理解,第二次赋值会覆盖掉第一次的赋值。这样做的话,第一次的定义赋值就没有意义了。
举个例子:
#include <stdio.h>

int main(){

        int a = 2, b = 7;
        a = 4,b = 1;

        a > b ? ++a : ++b;
       
        printf("%d\n", a);
        printf("%d\n", b);
}

➜desktop vim test.c
➜desktop gcc test.c && ./a.out
5
1
a的值变为5了,因为第二次a = 4 把第一次的 a = 2给覆盖了。
页: [1]
查看完整版本: 条件运算