这个一个关于C语言 的三目运算符和选择结构的问题

这个一个关于C语言 的三目运算符和选择结构的问题

问题描述:

三目运算符大大减少了代码量,他和选择结构一样吗?
是不是所有的选择结构都可以转换成三目运算呢?
请大佬们帮忙解答一下

首先要纠正一下,?:是三目运算符(拥有三个操作数(oprand))没错,但是三目运算符不是?:
好比! ~ ++ -- 是单目运算符,+ - * / && || 是双目运算符,虽然似乎c语言的三目运算符只有?:,但是不能把?:叫做三目运算符。你可以叫它条件赋值运算符。

理论上来说,因为c语言支持函数指针,的确if else可以用条件赋值运算符实现,也就是要执行的两个分支分别定义为两个函数,用条件赋值运算符根据条件,让指针指向两个函数的的地址,再调用。而switch...case可以用多个条件赋值运算符级联实现。

他和选择结构不同,这么说吧,三目运算符其实就是if,else结构的简单化。

    int a=1;

    if(a==1){
        cout<<"1"; 
    }else{
        cout<<"0";
    }

    a==1 ?cout<<"1": cout<<"0";

而选择结构则不同,能够对同一个变量的不同情况进行不同的操作。

    switch (a){
    case 1:
        cout<<"1";
        break;
    case 3:
        cout<<"3";
        break;  
    }

至于使用if,else if,else if...else的结构,也可以达到相类似的目的,单是代码量就会更大了

三目运算用一行代码显示,如果判断只有一个,看起来会比if-else多行舒服。如果有很多格判断的时候,三目就不方便写,
而且可读性就不如if-else了,修改起来也会不方便。并且当我们的判断逻辑复杂一些,或者判断以后,不仅仅用来赋值的时候,
if-else的作用是三目运算符完全不可以替代的。即三目运算符实现不了该功能。
三目运算符常用在赋值时候,比如:int a = b?1:0; //表示如果b为真(大于0或是小于0),则a = 1; 反之a = 0; 如果要用选择分支,

if(b) a = 1
else a = 0;

所以并不是所有的选择结构都可以转换成三目运算。

三目运算符判断执行,最后是要返回结果,而其他两种没有,有时候这个会影响计算性能.