C 語(yǔ)言中的三目運(yùn)算符
三目運(yùn)算符是一種比較特殊的運(yùn)算符,在我們前面的總體運(yùn)算符介紹中,它被歸在了單獨(dú)的一類,也就是其它類別。這個(gè)運(yùn)算符其實(shí)更像是一個(gè)簡(jiǎn)化版的 if 語(yǔ)句,但是卻很簡(jiǎn)潔強(qiáng)大。
1. 語(yǔ)法
語(yǔ)句 1 ? 語(yǔ)句 2: 語(yǔ)句 3
當(dāng)語(yǔ)句 1 中條件成立的時(shí)候返回語(yǔ)句 2 的值,如果語(yǔ)句 1 中條件不成立,那么就返回語(yǔ)句 3 的值。
2. 應(yīng)用場(chǎng)景
在你需要進(jìn)行一個(gè)條件判斷,有真假存在,且輸出語(yǔ)句真假各為一行的時(shí)候就可以使用這個(gè)三目運(yùn)算了。
3. 實(shí)例
#include <stdio.h>
int main()
{
int x, y;
x = 0;
y = 10;
printf("%s\n", (x > y) ? "x > y" : "x < y");
return 0;
}
運(yùn)行結(jié)果:
x < y
這個(gè)語(yǔ)句還可以配合賦值語(yǔ)句使用,給變量賦值。
#include <stdio.h>
int main()
{
int x, y, z;
x = 0;
y = 10;
z = (x > y) ? 20 : 50;
printf("%d\n", z);
return 0;
}
運(yùn)行結(jié)果:
50
我們?cè)谥v述 C 語(yǔ)言邏輯運(yùn)算的時(shí)候知道了,在 C 語(yǔ)言中,即使引入了布爾類型,但是在使用 printf 函數(shù)輸出的時(shí)候,也是沒有辦法來直接輸出布爾類型的,只能是通過輸出整除類型來替代。如果我們想直接輸出布爾類型,可以通過編寫一個(gè)小的程序來擴(kuò)展輸出,將 0 和 1 直接替換為 false 和 true 輸出。但是這樣做如果輸出次數(shù)很多是值得寫這樣一個(gè)程序的,要是只是像我們測(cè)試或者只是單次輸出,那么就顯得有些復(fù)雜了。這時(shí)候,我們這次介紹的三目運(yùn)算符就有用武之地了。
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool x, y, z;
x = false;
y = true;
printf("x = %s; y = %s\n", x ? "true" : "false", y ? "true" : "false");
z = x || y;
printf("x || y = %s\n", z ? "true" : "false");
z = x && y;
printf("x && y = %s\n", z ? "true" : "false");
printf("!x = %s\n", !x ? "true" : "false");
printf("!y = %s\n", !y ? "true" : "false");
return 0;
}
運(yùn)行結(jié)果:
x = false; y = true
x || y = true
x && y = false
!x = true
!y = false
在上面的代碼中每個(gè) printf 函數(shù)都使用了本節(jié)介紹的三目運(yùn)算符。其實(shí)就是在每個(gè) printf 函數(shù)里都內(nèi)置了一個(gè)判斷語(yǔ)句。這個(gè)判斷語(yǔ)句會(huì)根據(jù)傳入的變量的值來進(jìn)行判斷,分別用 true 和 false 來替換 1 和 0 ,這樣就可以實(shí)現(xiàn)布爾值的輸出了。
4. 小結(jié)
作為 C 語(yǔ)言運(yùn)算符中比較特殊的一員,三目運(yùn)算符起到的作用更像是條件句。但是卻更加的精簡(jiǎn)。當(dāng)條件成立與不成立的時(shí)候分別執(zhí)行冒號(hào)分隔前和冒號(hào)分隔后面的語(yǔ)句,而判斷的條件,則是由問號(hào)與后面的語(yǔ)句進(jìn)行分隔。這個(gè)運(yùn)算符經(jīng)常會(huì)嵌入語(yǔ)句中執(zhí)行。