關(guan)于逗號運算符的理解
時間(jian):2019-02-19 來源:華清遠見(jian)
在C語言中運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)有很(hen)多,包括算(suan)(suan)(suan)(suan)數運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、關系運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、賦(fu)值運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、位(wei)運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、邏輯運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、三目運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、sizeof運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)、逗(dou)(dou)號運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)等(deng)(deng)等(deng)(deng),那今天我們(men)就重(zhong)點來給大家討(tao)論一(yi)下關于逗(dou)(dou)號運(yun)算(suan)(suan)(suan)(suan)符(fu)(fu)(fu)(fu)的(de)一(yi)些(xie)運(yun)算(suan)(suan)(suan)(suan)規則。
首先逗號運(yun)算符是(shi)非常簡(jian)單的(de)(de),對(dui)于初學(xue)者(zhe)來說(shuo),只要(yao)(yao)在相應的(de)(de)IDE環境中進行(xing)測試便可以得到想要(yao)(yao)的(de)(de)結果(guo);但是(shi)對(dui)于逗號運(yun)算符存在很多變(bian)種(zhong)的(de)(de)題(ti)目(mu),在一(yi)些筆試面(mian)試題(ti)中經常會見到,但是(shi)在真正(zheng)的(de)(de)實際(ji)開發用的(de)(de)卻不是(shi)很多,既然有網友問道這樣的(de)(de)題(ti)目(mu),那今天我就簡(jian)單的(de)(de)給大家解釋一(yi)下,什么是(shi)逗號運(yun)算符?
逗(dou)號(hao)運算符是指在C語言中,多(duo)個(ge)表(biao)(biao)達(da)式(shi)可以用逗(dou)號(hao)分(fen)開(kai),其中用逗(dou)號(hao)分(fen)開(kai)的(de)表(biao)(biao)達(da)式(shi)的(de)值(zhi)分(fen)別結算,但整(zheng)個(ge)表(biao)(biao)達(da)式(shi)的(de)值(zhi)是最后一個(ge)表(biao)(biao)達(da)式(shi)的(de)值(zhi)。
舉個例子:
int a1,a2,b=2,c=7,d=5; // 第1行(xing)
a1=(++b,c--,d+3); // 第(di)2行
a2=++b,c--,d+3; //第3行
對(dui)于(yu)給a1賦值(zhi)的(de)代碼,有三個表達式,用逗號分(fen)開,所以最終的(de)值(zhi)應該是最后一個表達式的(de)值(zhi),也就是(d+3)的(de)值(zhi),為(wei)(wei)8,所以a1的(de)值(zhi)為(wei)(wei)8。
對于給a2賦值(zhi)(zhi)的(de)代(dai)碼(ma),也是有三個(ge)表(biao)達(da)式(shi),這時(shi)(shi)的(de)三個(ge)表(biao)達(da)式(shi)為a2=++b、c--、d+3,(這是因為賦值(zhi)(zhi)運(yun)算(suan)符(fu)(fu)比逗(dou)號(hao)運(yun)算(suan)符(fu)(fu)優先級高)雖然(ran)(ran)最終表(biao)達(da)式(shi)的(de)值(zhi)(zhi)雖然(ran)(ran)也為8,但b=4(第2行代(dai)碼(ma)運(yun)算(suan)完時(shi)(shi),b=3,即第3行代(dai)碼(ma)運(yun)行時(shi)(shi),b的(de)值(zhi)(zhi)為4),所以(yi)a2=4
再來一個(ge)關于(yu)結(jie)合(he)性(xing)的例子(zi):
int i=24;
int n = (i++,i++,i++,i++); // n == 27
因為逗號運算符的結合性是自左向右,所以四個(ge)i++會(hui)依次運行(xing),但是最后一個(ge)i++在賦值之后才進(jin)行(xing)運算,所以最終返回27。
關于逗號運(yun)算符就是這么簡單,你學(xue)會了嗎?