三目運算符(a ? b : c)可以作為邏輯運算的載體
規則:當a 的值為真時,返回b的值 , 否則返回c的值
實驗1:三目運算符初探
#include <stdio.h> int main() { int a = 1; int b = 2; int c = 0; c = a < b ? a : b; (a < b ? a : b) = 3; printf("%d\n", a); printf("%d\n", b); printf("%d\n", c); return 0; }
三目運算符(a ? b : c)的返回值類型
~通過隐式類型轉換規則返回b 和 c中的較高類型
~當b 和c 不能隐式轉換到同意類型時将編譯出錯
實驗2:三目運算符的返回類型
#include <stdio.h> int main() { char c = 0; short s = 0; int i = 0; double d = 0; char* p = "str"; printf( "%d\n", sizeof(c ? c : s) ); printf( "%d\n", sizeof(i ? i : d) ); printf( "%d\n", sizeof(d ? d : p) ); return 0; }
逗号表達式:
實驗3:逗号表達式實例
#include <stdio.h> void hello() { printf("Hello!\n"); } int main() { int a[3][3] = { (0, 1, 2), (3, 4, 5), (6, 7, 8) }; int i = 0; int j = 0; while( i < 5 ) printf("i = %d\n", i), hello(), i ; for(i=0; i<3; i ) { for(j=0; j<3; j ) { printf("a[%d][%d] = %d\n", i, j, a[i][j]); } } return 0; }
實例4:一行代碼實現strlen函數
#include <stdio.h> #include <assert.h> int strlen(const char* s) { return assert(s), (*s ? strlen(s 1) 1 : 0); } int main() { printf("len = %d\n", strlen("Delphi")); printf("len = %d\n", strlen(NULL)); return 0; }
小結:
三目運算符返回變量的值,而不是變量本身
三目運算符通過隐式轉化規則确認返回值類型
逗号表達式按照從左到右的順序計算每個子表達式的值
逗号表達式的值為最後一個子表達式的值
,