(原創) 為什麼陣列變數等於第一個元素的記憶體位址? (C/C++) (C)

在C/C++中,我們知道ia = &ia[0];但為什麼要這樣定義呢?

如以下的C/C++程式碼?

= h + ia[8];


若以組合語言(MIPS)表示,另register $s1為g,$s2為h

lw $t0, 8($s3)     #$t0 = ia[8]
add $s1, $s2, $t0  #g 
= h + ia[8]


組合語言如何抓到ia[8]呢?以$s3為base address,offset 8個單位後,將該位址的值放到register $t0。8在陣列ia[8]的8就可抓到,但base address呢?所以只好將base address放到ia這個陣列變數存放,這樣$s3就可直接從ia獲得。

Conclusion
C語言當初就是為了取代組合語言,所以很多機制都可以從組合語言看出C語言的設計,也由此看到C語言存取陣列的另外一種寫法,如ia[8]也可以寫成*(ia + 8);其實不就與組合語言lw $t0,8($s3)的思維一樣嗎?

posted on 2007-03-04 08:41  真 OO无双  阅读(2612)  评论(0编辑  收藏  举报

导航