數組和指標在編譯的時候的區別

來源:互聯網
上載者:User

    c語言中指標和數組在編譯時間的區別 例如:int a[10]和int *b,a[5]和*(b+5) 在編譯的時候區別是什麼? 經過反覆的查資料和請教他人,最後在《c專家編程》裡找到了很好的答案。

    1。編譯器對數組名和指標變數的處理方式
編譯器在編譯時間會產生一個符號表,記錄了符號名和它的地址。對於指標變數,這顯然很好理解。而數組名就不那麼明顯了,它僅僅是一個符號而已,何來地址?編譯器是這樣處理的,它記錄了array[0]的地址;這和我們通常的理解也是一樣的。
    2。帶下標形式的數組和指標定址方式
        (1)數組情形
            char a[9]="abcdefgh";
            ...
            c=a[i];
           

            在編譯期,會在符號表中建立這樣一條記錄:
            name:a  address:9980
            要擷取a[i]的值分兩個步驟:
            step 1:取得i的值並和9980相加
            step 2:在記憶體位址(9980+i)處取其內容

        (2)指標情形
            char* p="abcdefgh";
            ...
            c=p[i];
            在編譯期,會在符號表中建立這樣一條記錄:
            name:p  address:4624
            要擷取p[i]的值分三個步驟:
            step 1:在記憶體位址4624處取其內容,比如說“5081”
            step 2:取得i的值並和5081相加
            step 3:在記憶體位址(5081+i)取其內容

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.