c++ 和 c 三目運算子區別

ramsey發表於2021-07-25

三目運算子

三目運算表示式:<表示式1>?<表示式2>:<表示式3>
例如:

 (a>b) ? a:b

C和C++中三目運算子區別

  • 在c語言中,三目運算子返回變數的值,即不能當左值。
    #include<stdio.h>
    int main()
    {
      int a = 10 ;
      int b = 20 ;
      (a<b ? a:b) = 30;
      printf("a=%d",a);
      return 0;
    }
    編譯報錯,提示 (a<b ? a:b) 不能當左值:
    [root@8a7aa77a8ba4 ~]# gcc test.c 
    test.c: 在函式‘main’中:
    test.c17: 錯誤:賦值運算的左運算元必須是左值
       (a<b ? a:b) = 30;
                   ^
  • 在c++中,三目運算子返回變數本身,即可以當左值。
    #include<iostream>
    using namespace std;
    int main()
    {
      int a = 10 ;
      int b = 20 ;
      (a<b ? a:b) = 30;
      cout<<"a="<<a<<endl;
      return 0;
    }
    輸出結果:
    a=30

    如何讓c語言的三目運算子當左值?

    要讓c語言三目運算子當左值,只需要三目運算子返回變數本身,即可以如下操作:
    *(a<b ? &a:&b) = 30
    #include<stdio.h>
    int main()
    {
      int a = 10 ;
      int b = 20 ;
     *(a<b ? &a:&b) = 30;
      printf("a=%d\n",a);
      return 0;
    }
    輸出結果:
    a=30
本作品採用《CC 協議》,轉載必須註明作者和本文連結
拉姆塞

相關文章