【C语言进阶深度学习记录】十四 C语言中 三目运算符和逗号表达式
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】十四 C语言中 三目运算符和逗号表达式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 三目運算符
- 1.1 三目運算符的返回類型的代碼案例分析
- 2 逗號表達式
- 2.1 逗號表達式代碼案例分析
- 2.2 如何用一行代碼實現(xiàn) strlen函數(shù)
- 3 總結(jié)
1 三目運算符
- 三目運算符(a?b:c)可以作為邏輯運算的載體
- 規(guī)則: 當a為真時,返回b,否則返回c的值
如下面的代碼:
#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; }- 運行結(jié)果為:
1
2
1
-
上面的代碼中,第11行給注釋掉了。這行代碼寫的有問題。
-
因為三目運算符是返回變量的值,而不是變量本身,所以11行中,左操作符是返回的一個具體的值,對這個值再賦值,肯定是錯誤的。(雖然它返回的是一個具體的數(shù)字,但是這個數(shù)字也是有數(shù)據(jù)類型的,具體是什么類型,下面會講。)
(a?b:c),如果b與c的類型不一樣,返回值應(yīng)該是什么類型?
- 通過隱式類型轉(zhuǎn)換規(guī)則,返回較高類型
- 當b和c不能隱式轉(zhuǎn)換為同一類型時,編譯將會出錯
比如在下圖中的三個三目運算符中,第三個printf中的double類型和 *p 指針類型不能轉(zhuǎn)換,將會編譯期間報錯。
1.1 三目運算符的返回類型的代碼案例分析
- 代碼:18-2.c
- 使用gcc 4.4.5 編譯程序顯示如下錯誤:
- 將第13行注釋掉編譯運行結(jié)果如下:
- 第一個為什么是4。實際上是因為第一個返回了int類型。具體類型轉(zhuǎn)換的規(guī)則參考C語言中的類型轉(zhuǎn)化
2 逗號表達式
在C語言中:
- 逗號表達式是C預壓的一種“粘結(jié)劑”
- 逗號表達式用于將多個子表達式連接為一個表達式
- 逗號表達式的值為最后一個子表達式的值
- 逗號表達式的前N-1個子表達式可以沒有返回值,最后一個子表達式有返回值即可
- 逗號表達式按照從左向右的順序計算每個表達式的值
2.1 逗號表達式代碼案例分析
- 代碼 18-3.c
- 上述代碼編譯運行結(jié)果為:
- 第一個while循環(huán)后的三個語句,都是逗號表達式的一員,所以while循環(huán)5次
- 定義數(shù)組a的時候,由于是使用的圓括號,里面的定義也是三個逗號表達式。應(yīng)該改成下面的定義:
那么結(jié)果就是正確的。注意逗號表達式的使用。
2.2 如何用一行代碼實現(xiàn) strlen函數(shù)
- 代碼 18-4.c
- 編譯運行結(jié)果如下:
- 是不是體會到了逗號表達式與三目運算符的妙用?
3 總結(jié)
- 三目運算符返回變量值,而不是變量本身
- 三目運算符通過隱式類型轉(zhuǎn)換的規(guī)則確定的返回值的類型
- 逗號表達式按照從左向右的順序計算每個子表達式的值
- 逗號表達式的值為最后一個子表達式的值
總結(jié)
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】十四 C语言中 三目运算符和逗号表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求二叉树的深度和宽度
- 下一篇: matlab内置函数fitgeotran