又黄又www的网站_青青草.com_在线亚洲美日韩_九九九国产视频_√天堂8资源中文在线_一区二区三区免费网站_久久久久国产一区二区三区_人妻激情偷乱视频一区二区三区_一本到在线视频

C基礎:++和--運算

發(fā)布時間:2011-09-16 共1頁

  ++是C++的自增運算符,作用是使變量自加1;--是自減運算符,作用是使變量自減1。++和--有兩種用法,一種是前綴用法,一種是后綴用法。前綴用法如:++i、--i ,后綴用法如i++、i--,前綴用法跟后綴用法的差別在于前綴時++i的值為完成i加1后的值,--i為完成i減1后的值。例如:假設i的初值為3,執(zhí)行cout<<++i<<endl;輸出結果為4,而執(zhí)行cout<<i++<<endl;輸出結果為3。--運算符同理。這是世人皆知的常識,我們不再討論,現(xiàn)在我們來討論一點有趣的東西,看如下代碼:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<(i++)+(i++)+(i++)<<endl;
  cout<<i<<endl;
  return 0;
  }
  問,第一次和第二次輸出的結果分別是多少?
  有人說,是12和6。理由是,表達式從左至右開始計算,因為第一個括號內++運算符是后綴用法,i的初值為3,所以,第一個括號的值是3,計算完第一個括號之后,i自加1,變成4,然后計算第二個括號,第二個括號里的++也是后綴用法,所以,值為4,執(zhí)行完第二個括號后,i再加1,變成5,接下計算第三個括號,第三個括號里的++也是后綴用法,所以,第三個括號的值為5,然后計算第三個括號相加的和,即3+4+5=12。這個理由看起來不錯,似乎應當是這樣。然而,運行結果卻讓人跌眼鏡,竟然是9和6。這是怎么回事呢?說起來也很簡單,這是因為很多編譯系統(tǒng)規(guī)定,在遇到一條計算表達式中同時出現(xiàn)若干i++、i--的情況時,在當前語句中并不執(zhí)行i的自增和自減,i的初值是多少,i++和i--的值就是多少,當這條表達式執(zhí)行完成之后,再將i連續(xù)自加或自減若干次。
  再看如下代碼:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<(++i)+(++i)+(++i)<<endl;
  cout<<i<<endl;
  return 0;
  }
  問,第一次和第二次輸出的結果分別是多少?
  有人說,結果應該是4+5+6=15和6。理由我想家都想明白,我就不多說了。還有人總結了上例的經驗,認為,輸出結果應該是9和6。我們來運行一下這個程序,看看誰說得對……
  好了,運行結果出來了,不過這不是什么好結果,可能很多人看完會抓狂,結果盡然是神鬼莫測的18和6。為什么呢?道理跟上例差不多,那就是很編譯系統(tǒng)規(guī)定,連續(xù)多個前綴式++和--運算符出現(xiàn)在同一個運算表達式中時,先將變量連續(xù)自加或自減N次,然后判定++i的值為i+N。
  為了驗證上面的說法,請看下面的代碼:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<(++i)+(i++)+(++i)<<endl;
  cout<<i<<endl;
  return 0;
  }
  按照我們上面的推測,第一個輸出語句應當是這樣執(zhí)行的:首先,掃描整條運算表達式(++i)+(i++)+(++i),發(fā)現(xiàn)有兩處++的前綴式用法,于是,將i連續(xù)自加兩次,然后開始計算表達式,第一個括號是++i,判定為5,第二個括號是i++,判定值為5,第三個括號是++i判定值為5,最后,計算結果5+5+5=15。因為表達式中有一個i++,所以執(zhí)行計算完之后將i的值再自加1,變?yōu)?。
  運行程序,驗證一下,果然,結果就是15和6。
  下面在來討論一下網上很多C++論壇里討論得很多的int i=3;問++i+++i+i++的值是多少的問題。
  我看到CSDN里也有人在討論這個問題,很多人在回帖,答案似乎多種多樣,有說是12的,有說是18的,更有說是9的,更有一條回帖十分搞笑——“答案是×××,這是很早以前我的一個很牛×的老師教我的解法得出的結果”。我很無語。學過編譯原理的人都知道,“++i+++i”這一段根本就無法解析,編譯系統(tǒng)從左至右掃描整條語句,先遇到++i,判斷出來是一個i的前綴自加運算,然后接著掃描,遇到一個+,+是一個二目運算符,它的左邊已經有一個運算數++i了,系統(tǒng)就向右搜索第二個運算數,又遇到一個+,++比+的運算級別要高,這時,編譯系統(tǒng)就將兩個+看成一個整體來處理,既然是++,編譯系統(tǒng)就認定,肯定它的左邊或右邊有一個變量,編譯系統(tǒng)先搜索左邊,發(fā)現(xiàn)有一個 i,是個變量,于是它就將i和其后的++組合起來,這時問題就發(fā)生了,也就是說第一個i被編譯系統(tǒng)綁架到它后面的++那里去了,那么i前面的++是個什么東西呢?編譯系統(tǒng)是無法搞明白的,它會倒回去重新搜索++前面是否有左值,發(fā)現(xiàn)沒有,因此它就認為++是一個缺少左值的自增運算符,于是提示提示用戶:’++’ needs l-value
  我們寫個程序驗證一下上面的推測:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<++i+++i+i++<<i<<endl;
  cout<<i<<endl;
  return 0;
  }
  果然,編譯時有一個錯誤,提示error C2105: ’++’ needs l-value ,證實了我們的推測。這個問題的討論使我們得出一個結論:如果一個變量Ni的兩側都有++或--運算符并且Ni左邊的表達式不能分解成X+或X-的形式,那么編譯就會出錯,X是有值變量。結論有點繞口,舉例說明吧:
  程序1
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<i+++i++<<endl;
  cout<<i<<endl;
  return 0;
  }
  程序1說明:表達式i+++i++中第二個i的左右兩側都有++,于是我們看第二個i的左側,左側是i+++,可以分解為(i++)+,其中“(i++)”是有值變量,符合X+的形式,因此i+++i++是合法表達式,可以通過編譯。
  程序2
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<++i+++i<<endl;
  cout<<i<<endl;
  return 0;
  }
  程序2說明:表達式++i+++i中第一個i的左右兩側都有++,于是我們看第一個i的左側,左側是++,不能分解成X+的形式,因此該表達式不合法。編譯時會提示:error C2105: ’++’ needs l-value
  下面,我們再來討論一下關于i+++i的問題。曾經有人問,表達式i+++i在編譯時,編譯系統(tǒng)是怎么拆分的?究竟是拆分成(i++)+i呢,還是拆分成i+(++i)。
  這個問題本身的答案很簡單,是(i++)+i,不明白的自己去看編譯原理。這個問題令人感興趣之處并不在這里,不知道家注意到i+(++i)這個表達式有什么奇特的地方沒有?假設有如下程序:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<i+(++i)<<endl;
  cout<<i<<endl;
  return 0;
  }
  家可以猜測一下程序的運行結果。
  很多人可能會說是7和4,看起來的確像這樣。但是,非常遺憾,實驗再一次證明,你可能猜錯了,結果是8和4。為什么是8和4呢?前面說過int i=3;cout<< (++i)+(++i) <<endl;的情況,編譯系統(tǒng)會先將i連續(xù)自加1兩次,然后將(++i)一律判定為5進行結算,輸出10。這里同理,編譯系統(tǒng)現(xiàn)將i自加1,然后再對i+(++i)做運算,(++i)的值判定為4,i的值也判定為4,因此計算結果是8。
  下面我們來討論int i=3;cout<<i++<<” and ”<<i++<<endl;的問題。首先請看如下程序,猜測輸出結果:
  #include <iostream>
  using namespace std;
  int main()
  {
  int i=3;
  cout<<i++<<" and "<<i++<<endl;
  cout<<i<<endl;
  return 0;
  }
  很多人認為輸出結果應該是“3 and 4”和5。我們把代碼復制到VC6.0或VC2005上編譯運行一下,看看結果……
  好了,運行結束,結果是“4 and 3”和5。Oh!My God!Can you tell me why?上帝不會告訴你,我可以告訴你。這是因為很多編譯系統(tǒng)在處理輸出流時,是從右至左的。在上面的例子中,兩處i++處于同一個輸出序列中,編譯系統(tǒng)會先計算處于右側的第二個i++,這時i的值為3,因此右側i++的值為3,之后,i+1變成4,計算第一個i++的值為4,計算完之后將i的值再加1,最后才是輸出結果,所以輸出結果是4和3。

百分百考試網 考試寶典

立即免費試用
爱看av在线| 色就色 综合激情| 欧美在线观看一区| 欧美成人合集magnet| 精品一区二区三区自拍图片区| 国产在线青青草| 青青草自拍偷拍| 亚洲免费视频在线| 在线黄色av| 国产日韩在线观看视频| 欧美91福利在线观看| 26uuu国产一区二区三区| 欧美一区欧美二区| 国产精品免费久久久久影院| 免费成人午夜视频| 欧美亚洲天堂网| 黄无遮挡免费网站| 成人爽a毛片免费啪啪动漫| 成人羞羞动漫| 国产精品久久久久久久久久免费看| 欧美精品一区二区三区久久久 | 变态另类丨国产精品| 亚洲国产日韩在线观看| 夜色福利资源站www国产在线视频 夜色资源站国产www在线视频 | 毛片在线能看| 狠狠做六月爱婷婷综合aⅴ| 久久一二三国产| 国产亚洲精品久久久久久牛牛| 欧美影视一区二区| 中文字幕美女视频| 黄色免费直接看| 欧美日韩卡一| 国产精品88av| 国产亚洲精品美女久久久久| 日韩中文字幕一区二区| 神马午夜精品91| 色先锋av影音| 国产精品香蕉| 国产精品第五页| 91av视频在线播放| 人妻体体内射精一区二区| 色综合视频在线| 成人爽a毛片免费啪啪动漫| 青娱乐精品在线视频| 精品女同一区二区| 日韩精品成人一区二区在线观看| 欧美激情精品久久久久久免费| 日本视频免费高清一本18| av日韩一区| 久久精品一级爱片| 午夜精品在线视频| 波多野结衣网页| 久久国产精品久久久久久小说| 色是在线视频| 高清成人在线观看| 欧美成年人在线观看| 人人干人人干人人| 小早川怜子痴女在线精品视频| 手机在线理论片| 成人免费电影视频| 欧美激情网站在线观看| 最新国产黄色网址| 人xxxx性xxxxx欧美| 亚洲视频自拍| 综合网在线视频| 亚洲bt天天射| 欧美一区二区三区爽爽爽| 日本不卡1区2区3区| 欧美+亚洲+精品+三区| 91精品欧美久久久久久动漫 | 黄色软件在线观看| 香蕉国产精品偷在线观看不卡| 精品福利二区三区| 激情深爱综合网| 久久爱com| 亚洲国产视频二区| 亚洲影视在线播放| 久久66热这里只有精品| 欧美一区二区三区网站| 中文字幕有码在线观看| 成人激情动漫在线观看| 欧美专区在线观看| 四虎影视1304t| 色视频在线观看免费| 日韩不卡一二三区| 久久国产精彩视频| 欧美色图亚洲激情| 在线看三级网站视频| 一区二区高清| 精品国产欧美一区二区五十路 | 欧美巨胸大乳hitomi| 在线观看国产视频| 黄页视频在线91| 91精品国产乱码久久久久久蜜臀| 在线观看福利片| 四虎精品在线| 国产宾馆实践打屁股91| 国产精品扒开腿爽爽爽视频| 疯狂撞击丝袜人妻| a级毛片免费观看在线| 成人精品小蝌蚪| 国产91色在线|| 日韩成人高清视频| 第84页国产精品| 亚洲国产毛片aaaaa无费看| 先锋在线资源一区二区三区| 亚洲女同志亚洲女同女播放| 国产91亚洲精品久久久| 亚洲国产精品嫩草影院| 日韩最新中文字幕| 性欧美69式xxxxx| 亚洲香蕉av| 久久久999国产精品| 亚洲最大成人综合网| 欧洲日本在线| 国产精品国产三级国产a| 欧美日本韩国一区二区三区| 神马午夜电影一区二区三区在线观看| 成人盗摄视频| 亚洲国产精久久久久久久| 高清中文字幕mv的电影| 三区在线观看| 久久久欧美精品sm网站| 欧美专区一二三| 精品樱空桃一区二区三区| 激情综合久久| 97激碰免费视频| 久久久精品毛片| 亚洲国产欧美在线观看| 亚洲第一精品夜夜躁人人躁| 99久久人妻精品免费二区| 成人精品一区二区三区校园激情| 国产欧美日韩综合| 在线视频一区观看| 免费黄色大片| 国产原创一区二区三区| 国产经典一区二区三区| 男人用机机桶女人| 亚洲精品色图| 国产日韩一区在线| 亚洲精品国产一区二| 欧美大片aaaa| 68精品国产免费久久久久久婷婷| 亚洲不卡视频在线观看| 99热这里只有精品首页| 国产一区二区三区日韩欧美| 久久免费看少妇高潮v片特黄| 欧美一级二级视频| 亚洲成人久久久久| 三级黄色免费观看| 免费日韩成人| 亚洲欧美在线播放| 国产精品19乱码一区二区三区| 99精品美女视频在线观看热舞| 日韩第一页在线| 小向美奈子av| 高清在线一区二区| 在线观看成人黄色| 日本韩国欧美中文字幕| 国产一卡不卡| 国产精品xxx视频| 丁香久久五月| 国产一区二区美女| 丰满女人性猛交| 日本高清视频网站www| 国产精品亲子伦对白| 狠狠97人人婷婷五月| 欧美欧美欧美| 色一情一伦一子一伦一区| 亚洲一区二区三区综合| 欧美日韩视频免费观看| 亚洲片av在线| 中文字幕第一页在线播放| 亚洲精品久久久| 5g影院天天爽成人免费下载| 国产高潮又爽又无遮挡又免费| 国产精品77777| 国产黄色激情视频| 毛片免费在线| 欧美区视频在线观看| 天天做夜夜爱爱爱| 亚洲日本三级| 91精品免费久久久久久久久| 国产精品久久久精品a级小说 | 国产河南妇女毛片精品久久久| 国产成人精品免费看在线播放 | aaa日本高清在线播放免费观看| 高跟丝袜一区二区三区| 欧美激情久久久久久久| 加勒比色老久久爱综合网| 性视频1819p久久| 欧美xxxx性猛交bbbb| 99re热这里只有精品免费视频| 99色精品视频| 91在线超碰| 久久精品国产欧美激情| 一区二区三区免费视频网站 | 久艹在线免费观看| 天使と恶魔の榨精在线播放| 亚洲欧洲在线看|