stackoverflow | C | 在C數組中為什麼 a[5] == 5[a]是對的?

來源:互聯網
上載者:User

原帖連結:http://www.keepsimply.org/2012/07/06/in-c-arrays-why-is-this-true-a5-5a/

作者:獨酌逸醉
時間:2012.07.05

聲明:翻譯僅以技術學習和交流為目的,如需轉載請務必標明原帖連結。
來源:http://stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a
水平有限,如有翻譯不當,歡迎探討、批評與指正。

文章內容:
Dinah:
Joel 在 Stack Overflow podcast #34中指出,在C程式設計語言(aka: K&R)中,都提到了在 C 數組的一個性質:a[5] = 5[a]。
Joel 解釋說那是指標運算,但是我仍舊不理解,為什麼 a[5] == 5[a] ?

Mehrdad Afshari: 因為 a[5] 相當於 *(a+5) ,5[a] 相當於 *(5+a)。用小學數學我們就可以判斷它們是相等的。
這是一種數組作為指標的直接表現方式(This is the direct artifact of arrays behaving as pointers)。"a"是一個記憶體位址。"a[5]"是距離 a 5 個長度元素的值。元素的地址是 "a+5"。這和從記憶體位址開始 5 個元素的位置開始位移 a 個地址是一樣的,地址空間是(5+a)。
John MacIntyre: 我想知道是不是和 *(5*sizeof(a)) + a)一樣,要是這樣的話,就很好解釋了。
Mehrdad Afshar: 是的,我沒有提到 sizeof 的原因是那樣可以很簡單把問題解釋清楚,加上時候會變得複雜。(I was going to mention the size. but thought I would complicate just things to get the core idea.)
Johannes Schaub - litb : John,不需要使用 sizeof,系統在位移的時候,自動按照 sizeof 的大小的進行遞增的。
Mehrdad Afshari: @Dinah,站在C編譯器的角度上說,你是對的。不需要考慮 sizeof,我提到的這些運算式也是類似的(不用考慮sizeof)。然而編譯器在產生機器碼的時候,會考慮 sizeof 的。如果 a 是一個 int 數組,a[5] 編譯器將會使用 mov eax, [ebx+20] 這樣的彙編代碼來實現,而不是 [ebx+5]。

David Thornley:因為數組的存取方式被定義成指標(的存取方式),a[i] 實現為 *(a+i),它們是可互換的。

筆者:
1.<a href="http://www.cppleyuan.com">C++奮鬥樂園</a>曾經有一個類似的文章,關心這個問題的朋友可以去看看,很不錯。 關於二維數組中的元素a[i][j]的訪問問題
2.我沒有完全把整個文章翻譯完,有一些評分較低的,我就沒有翻譯。
3.翻譯完之後,我覺得這個文章選擇的不太好,內容不夠充實。引發我一些思考,我考慮下次翻譯要不要找一些文章來翻譯。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.