array和pointer

從學C開始就曉得array和pointer可以說是一體的兩面,我也一直把array name當成一個不可修改的pointer。

所以我們也常常array == &array[0],array+2 == &array[2]這樣換著用。但是上次朋友拿了一份看起來覺得有問題的程式碼。他是&array和&array[i]這樣混著用。

&array直覺會覺得這不是變成指標的指標?但是實際上程式是ok的。於是拿Visual C++實際寫sample trace看看,發現int array[]的話,array和&array的值是會一樣的。也就是說這是array和pointer不同的一個重大特性。問了認識的人很少人知道,可能沒真正K過C spec的人也很少會曉得。

不過這種寫法(&array)在The C Programming Language並沒有提到,K&R也只用'array'。說實在這種東西有趣歸有趣,還滿令人困擾的,所以還是別用吧。

留言

  1. pointer真是有趣的玩意兒
    感覺就像資料的頭上都載上了靶
    天涯海角也要一箭中的
    不過對於我這種大三正逢java2大肆其行的人
    對於指標陣列造成指標混亂的指控云云
    只得自作一株牆頭草跟著瞎起鬨狂踩pointer的痛腳
    想來也是極其有趣的學習歷程.....呵

    回覆刪除
  2. 您這個問題剛好C FAQ有精闢的解答..XD

    http://c-faq.com/aryptr/aryvsadr.html

    &和sizeof剛好是comipler處理array type的一個特例,這點到是蠻讓人confuse..:p

    回覆刪除
  3. 沒事多翻 c faq 有益身心
    http://c-faq.com/aryptr/aryvsadr.html

    回覆刪除
  4. 發現是自己學藝不精,只曉得windows流的寫程式方法。

    &array[0]是array element型態的指標,而&array是整個array型態的指標。

    Linux下根據這件事來判斷array size的技巧到處都在用,不像windows必定會跟著一個size在傳。所以linux programmer對這件事定不陌生。

    總之又學了一課。

    回覆刪除

張貼留言

這個網誌中的熱門文章

文言文

談談台灣人使用統傳漢字的優越心態

台灣工程師常唸錯的英文單字