單目運算符是指:運算對象只有一個的運算符;如:取正(+)、取負(-)、取反(^)、或(|)、與(&)等等;
雙目運算符是運算對象有兩個的;如:加(+)減(-)乘(*)除(/)、自加(++)、自減(–)、邏輯與(||)、邏輯或(&&)、取余(%)、賦值(=)等;
三目運算符在c語言中我知道的就一個(?:),主要是:(表達式1?表達式2:表達式3)其用法是:當表達式1的值為真,執行表達式2,并以表達式2的值為此表達式的值;當表達式1值為假,就跳過表達式2,去執行表達式3,并以表達式3的值作為表達式的值;
首先需要明白什么是三目運算符,百度百科的定義如下:
對于條件表達式b?x:y,先計算條件b,然后進行判斷。如果b的值為true,計算x的值,運算結果為x的值;否則,計算y的值,運算結果為y的值。一個條件表達式絕不會既計算x,又計算y。條件運算符是右結合的,也就是說,從右向左分組計算。例如,a?b:c?d:e將按a?b:(c?d:e)執行。1 <表達式1>?<表達式2>:<表達式3>; “?”運算符的含義是: 先求表達式1的值, 如果為真, 則執行表達式2,并返回表達式2的結果 ; 如果表達式1的值為假, 則執行表達式3 ,并返回表達式3的結果。可以理解為條件 ? 結果1 : 結果2 里面的?號是格式要求。也可以理解為是不是條件成立,條件成立為結果1否則為結果2。 即C++中必須指明: * 輸入的參數是什么類型,int還是double? * 返回值為什么類型?int還是double,或者其他。
以上若干圖片的要點是: * 要想當左值,即出現在=號左邊,則必須為返回的是變量的地址,而不是變量的數值 * 三目運算符在C和C++中的“表現不一樣”,說到底還是兩個編譯器對三目運算符的操作不一樣。在C中,三目運算符返回的是變量的值,是一個數值,而在C++中, 三目運算符返回的是變量的本身==即內存首地址。也就是說,C++編譯器已經幫程序員提前做了取地址的工作。 具體的原理可參考最后一張圖片,如下:
注意黃圈圈處的改動。
新聞熱點
疑難解答
圖片精選