三目運算子 (a ? b : c) 可以作為邏輯運算的載體
規則:當 a 的值為真時,返回 b 的值,否則返回 c 的值
下面看一下例子,初識三目運算子?
例子:三目運算子初探
編譯器報錯,不能操作左值,其實編譯器返回變數的值,不會返回變數本身。(a < b ? a : b) = 3 ==> 1 = 3,這是不合法的
// 18-1.c
#include
intmain()
c = a < b ? a : b;
相當於:
if(a < b) c = a;
else c = b;
三目運算子(a ? b : c)的返回型別:
下面看乙個例子,檢視三目運算子的返回型別
// 18-2.c
#include
intmain()
我們先來分析一下:
1、變數 c 和 s 的較高型別是 int,所以 c ? c : s 返回型別為 int,大小為 4位元組。
2、變數 i 為 int 型別,i 4位元組;變數 d 為 double,8位元組空間,i ? i : d 返回型別為 double,大小為 8 位元組
3、p 為 char 型別的指標,不能 double 型別轉換到同一型別,編輯將報錯。
真的是這樣嗎?我們編譯一下:
編譯器提示,d 和 p 型別不匹配,和我們分析的一樣。注釋第 11 行,再次編譯:
結果和我們分析的完全一致。
下面看乙個逗號表示式的示例:
最後我們來做乙個題:一行**實現 strlen// 18-4.c
#include
#include
intmystrlen
(const
char
* s)
intmain()
利用逗號表示式將 assert(s) 和 (*s ? mystrlen(s+1)+1 : 0) 連線起來,成為乙個表示式,為什麼需要 assert(s) 呢,因為如果 s 為空,對 s 解引用會出錯。1、三目運算子返回變數的值,而不是變數本身
2、三目運算子通過隱式型別轉換規則確定返回值型別
3、逗號表示式按照從左向右的順序計算每個子表示式的值,其值等於最後乙個子表示式的值
C語言 條件運算子 三目運算子
1 if a b else max a b a b 無論a b是否滿足,都向同乙個變數賦值 條件運算子優先於賦值運算子,所以先求解條件表示式,再將它的值賦值給max 2 a b printf d n a printf d n b 注意此處表示式後面沒有 a b a 100 b 200 表示式2和表示...
C語言 三目運算子(條件運算子)
今天在看c語言的時候看到了下面的 廢話少說,直接上 include intmain inta,b,c intmax 執行結果如下 please enter three integer numbers 34 67 12max is 67 這個例子很簡單,其中運用了三目運算子 m a b?a b 如果在...
C語言 三目運算子(條件運算子)
今天在看c語言的時候看到了下面的 廢話少說,直接上 include int main inta,b,c intmax 執行結果如下 please enter three integer numbers 34 6712 max is67 這個例子很簡單,其中運用了三目運算子 m a b?a b 如果在...