久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 關于i++的問題討(tao)論

關于i++的問(wen)題討論(lun) 時間:2018-09-29   ;   來源:未知(zhi)

這(zhe)(zhe)幾天(tian)在講c語言時,有學(xue)生問我(wo) “(i++)+(++i)+(i++)”之類的問題(ti),令我(wo)一時語塞,研究(jiu)了(le)半天(tian)。今天(tian)我(wo)要告訴你(ni)們(men),這(zhe)(zhe)樣(yang)的語句是罪(zui)惡的。你(ni)們(men)也許要說(shuo),這(zhe)(zhe)明明是考(kao)試重點呀。別(bie)急,下面我(wo)們(men)分(fen)成三個(ge)部(bu)(bu)分(fen)來(lai)組織:在第(di)(di)一部(bu)(bu)分(fen)中,解釋為(wei)什么它有罪(zui);第(di)(di)二部(bu)(bu)分(fen),為(wei)了(le)解救(jiu)你(ni)們(men),我(wo)們(men)找(zhao)出(chu)解題(ti)規律;在第(di)(di)三部(bu)(bu)分(fen)中,給出(chu)幾個(ge)更(geng)變態的題(ti)目(mu),今后(hou)誰出(chu)這(zhe)(zhe)種題(ti)給你(ni),你(ni)就用(yong)我(wo)這(zhe)(zhe)里的題(ti)目(mu)去問他。

一. 這(zhe)種語(yu)句的合法性

C語言的創始人D.M.R在《CPL》中明(ming)確指出:

自增與自減運(yun)算符只能(neng)作用于變量,類似于表達(da)式(i+j)++是非法的。

自(zi)增(zeng)運(yun)(yun)算(suan)實(shi)際(ji)上包(bao)括了一個賦(fu)值(zhi)(zhi)運(yun)(yun)算(suan),而表(biao)達式不(bu)(bu)能(neng)作(zuo)賦(fu)值(zhi)(zhi)運(yun)(yun)算(suan)的(de)左值(zhi)(zhi),因為(wei)它沒(mei)有確定的(de)內存地(di)址(zhi)。只(zhi)要你明白 (i+j)=5 是(shi)(shi)非(fei)法(fa)(fa)的(de),那(nei)就不(bu)(bu)難(nan)理解為(wei)什(shen)么(i+j)++非(fei)法(fa)(fa)。以此為(wei)依據,(i++)+(i++)這個語句中的(de)后一項(xiang),是(shi)(shi)非(fei)法(fa)(fa)的(de)。盡管看起(qi)來它只(zhi)是(shi)(shi)一個i++,但別忘了,在(zai)前一個i++的(de)作(zuo)用下,后面的(de)“i”本身就已經是(shi)(shi)表(biao)達式了,表(biao)達式不(bu)(bu)能(neng)再做++。一般地(di),在(zai)一個語句中,對同一個變量調用多次自(zi)增(zeng)或自(zi)減運(yun)(yun)算(suan),都是(shi)(shi)非(fei)法(fa)(fa)的(de)。D.M.R還提(ti)醒(xing),編譯(yi)器應在(zai)這種情況下給(gei)出警告。事實(shi)上,gcc確實(shi)會對此給(gei)出一個:Warning: operation on ‘i’ may be undefined

這已經夠清楚了(le),無需(xu)多言。請編寫教學(xue)大綱者注意,多年以來,你(ni)們一直在用非(fei)法語句作考試重點(dian)。

二.如何解釋這種結果:

以 (i++)+(++i)+(++i)+(i++)+(i++) 為例:

計算步驟:

1. 先將所有的(de)(de) i++ 改成 i ,然后在整個(ge)語(yu)句(ju)的(de)(de)后,統一將 i 自增(zeng)相(xiang)應的(de)(de)次數(shu)(語(yu)句(ju)中有幾個(ge) i++,就在后自增(zeng)幾次)。我們(men)的(de)(de)例子,這(zhe)時會變成 i+(++i)+(++i)+i+i; i++; i++; i++;

2. 按照加(jia)法的結(jie)合(he)性(xing),先將左起前(qian)(qian)兩項(xiang)相(xiang)加(jia)。如果(guo)前(qian)(qian)兩項(xiang)中含有 ++i,則先算 ++i;

3. 前兩(liang)項(xiang)的和作(zuo)為(wei)一項(xiang),與第三項(xiang)相加,以此類推(tui)。同樣,遇到 ++i,就先算 ++i。

以(yi)上就(jiu)是編(bian)譯器處理這種語句(ju)的(de)規律,當然(ran),這并不是C語言定義的(de),只是編(bian)譯器在出錯(cuo)情況下(xia)的(de)無(wu)奈(nai)之舉。

三.實例如下(xia):i=5;

1. 求j = (i++)+(++i)+(i++) 和i的值 , j=18, i = 8

按上面的方法(fa)做:

1)先把i++換到后(hou)面,變成 i + (++i) + i ; i++; i++;

2)從左到右(you)累加(jia),先(xian)拿出前兩項 i + (++i)。先(xian)算 ++i,i 的值(zhi)變(bian)成6,兩項相加(jia)得12;

3)計算 12 +i,得18。

4)后面如果(guo)在打印i的值,則為8

2. 求j = (i++)+(i++)+(i++) 和 i 的(de)值(zhi),j = 15, i = 8

按上面的方法做:

1)先把i++換到后面,變成 i + i + i ; i++; i++;i++;

2)從(cong)左(zuo)到右累加,得到的值為15;

3)后面如(ru)果(guo)在打印i的(de)值(zhi),則(ze)為8

3.求j = (++i)+(++i)+(++i) 和(he) i 的值(zhi), j = 22, i = 8

按上(shang)面的方法(fa)做:

1)從左到右累加,先拿出前兩項(xiang) (++i) + (++i),先執行(xing)兩次(ci)自增操作,第一次(ci)i的(de)值(zhi)(zhi)變為6,第二次(ci)i的(de)值(zhi)(zhi)變為7,然后再求值(zhi)(zhi),7+7 = 14 。

2)14 + (++i) = 14+8 = 22;

3)后面如(ru)果在打印i的值,則為(wei)8

上一篇:WRTnode進階篇: usb設備移植

下一篇:Hi3515 start.S文件分析

熱點文章推薦
華清(qing)學員(yuan)就業榜單
高(gao)薪(xin)學員經驗分(fen)享(xiang)
熱(re)點新聞推(tui)薦
前(qian)臺專線:010-82525158 企業培訓洽談專(zhuan)線(xian):010-82525379 院校合(he)作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部