• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            XGuru's Blog

            技術,是一種態度。關注:高性能后端技術/服務器架構/C++/C/LAMP

               :: 首頁 :: 聯系 :: 聚合  :: 管理
              20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

            公告





            twitter / xoXGuru

            feedsky
            抓虾
            google reader
            鲜果
            QQ邮箱
            九点

            常用鏈接

            留言簿(12)

            搜索

            •  

            最新評論

            閱讀排行榜

             

            大家對數組的使用再熟悉不過了吧?
            來看下這個程序,挺簡單的。

            1#include<iostream>
            2int main()
            3{
            4    int a[] = {1,2,3,4,5};
            5    for(int i = 0 ; i < 5; i++)
            6        std::cout << i[a] << " ";
            7    return 0;
            8}


            現在請仔細看第6行。
            發現了什么?
            試下編譯一下看能不能通過?


            把這個程序更加簡化

            1int a[5= {1,2,3,4,5};
            2int b = 1[a];

             
            再來看下產生的匯編代碼
            4:       int a[5] = {1,2,3,4,5};
            00401568   mov         dword ptr [ebp-14h],1
            0040156F   mov         dword ptr [ebp-10h],2
            00401576   mov         dword ptr [ebp-0Ch],3
            0040157D   mov         dword ptr [ebp-8],4
            00401584   mov         dword ptr [ebp-4],5
            5:        int b = 1[a];
            0040158B   mov         eax,dword ptr [ebp-10h]
            0040158E   mov         dword ptr [ebp-18h],eax

            你沒有看錯,此刻這個數組春哥附體,a[1]的指向地址和1[a]是一樣的,都是[ebp-10h]。

            Why?

            我們回憶一下數組和指針的關系,如何用指針來表示數組?
            *a  就是 數組 a中下標為0的值的引用,即a[0],
            那么*(a+i) 呢?
            表示的就應該是數組 a中下標為i的值的引用了,即a[i],
            那么這種現象也不足為怪了:
            因為 *(a+i)  == *(i+a)
            所以 a[i] == i[a]

            是不是感到 啊哈!靈機一動(aha! Insight)了呢?

            擴展資料:《C陷阱與缺陷》p33~p38




            posted on 2009-12-24 00:55 XGuru 閱讀(2146) 評論(14)  編輯 收藏 引用

            Feedback

            # re: C/C++數組的一個“怪現象” 2009-12-24 12:21 t
            搞c++的都懂點數組/地址間的關系 所以應該沒啥奇怪的

            真正奇怪的是, 這樣的寫法是不是標準c++. 我覺得[]前的應該是變量名字,而1應該不符合變量命名(數字不能開頭).  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 12:24 凡客成品
            路過踩踩!!  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 13:12 Ted
            @t
            其實不難想象,你所奇怪的不是已經被自己一語道破了嗎~
            數組也是地址,因此實際上1[a]這樣的語句被編譯器理解為"取基址1加上偏移量a的內存塊的內容".  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 14:16 izualzhy
            學習了呵呵  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 16:43 guest
            是古老的C語法。。很少人用了。  回復  更多評論
              

            # re: C/C++數組的一個“怪現象”[未登錄] 2009-12-24 19:25 cawboy
            新手,以前沒見過  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 22:15 cdy20
            偶贊!  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-24 22:38 Sunshine Alike
            我靈光一閃~~哈哈  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-25 12:16 float
            都是地址相加,數組名是一個常量指針。
            LZ可以試下

            "abcdef"[0];
            這樣也是正確的

            :)
              回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-25 16:07 凡客誠品官方網站
            是古老的C語法。。  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-26 11:49 Geek.tan
            “此刻春哥附體了”--哈哈  回復  更多評論
              

            # re: C/C++數組的一個“怪現象”[未登錄] 2009-12-28 18:00 欲三更
            加法滿足交換律  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-29 09:17 junglevass
            古老的c語法,別用了。。。。第一次見都會覺得奇怪。  回復  更多評論
              

            # re: C/C++數組的一個“怪現象” 2009-12-31 15:14 zsslxy2006
            在《C專家》或《C&指針》里有講過這種。  回復  更多評論
              

            欧美一区二区三区久久综| 久久久精品人妻一区二区三区蜜桃| 久久se精品一区精品二区| 久久国产高清一区二区三区| 天天综合久久一二三区| 亚洲欧美伊人久久综合一区二区 | 九九热久久免费视频| 少妇被又大又粗又爽毛片久久黑人 | 东方aⅴ免费观看久久av| 久久Av无码精品人妻系列| 久久无码国产| 久久99国产精品尤物| 偷窥少妇久久久久久久久| 精品久久国产一区二区三区香蕉 | 亚洲精品99久久久久中文字幕| 一本色道久久88—综合亚洲精品| 久久国产成人精品麻豆| 久久国语露脸国产精品电影| 久久婷婷久久一区二区三区| 99久久国产综合精品女同图片 | 亚洲国产精品久久久天堂| 久久精品成人欧美大片| 99久久久精品免费观看国产| 漂亮人妻被中出中文字幕久久| 精品水蜜桃久久久久久久| 精品999久久久久久中文字幕| 久久九九久精品国产免费直播| 久久国产精品一区| 99久久国产综合精品网成人影院| 久久久久久久人妻无码中文字幕爆| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久国产劲爆AV内射—百度| 久久久精品日本一区二区三区| 久久青草国产精品一区| 国产精品岛国久久久久| 久久久久亚洲av无码专区喷水 | 99精品国产在热久久无毒不卡| 熟妇人妻久久中文字幕| 色综合久久无码中文字幕| 久久香蕉国产线看观看精品yw| 人妻无码久久一区二区三区免费|