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'。說實在這種東西有趣歸有趣,還滿令人困擾的,所以還是別用吧。
所以我們也常常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'。說實在這種東西有趣歸有趣,還滿令人困擾的,所以還是別用吧。
pointer真是有趣的玩意兒
回覆刪除感覺就像資料的頭上都載上了靶
天涯海角也要一箭中的
不過對於我這種大三正逢java2大肆其行的人
對於指標陣列造成指標混亂的指控云云
只得自作一株牆頭草跟著瞎起鬨狂踩pointer的痛腳
想來也是極其有趣的學習歷程.....呵
您這個問題剛好C FAQ有精闢的解答..XD
回覆刪除http://c-faq.com/aryptr/aryvsadr.html
&和sizeof剛好是comipler處理array type的一個特例,這點到是蠻讓人confuse..:p
沒事多翻 c faq 有益身心
回覆刪除http://c-faq.com/aryptr/aryvsadr.html
發現是自己學藝不精,只曉得windows流的寫程式方法。
回覆刪除&array[0]是array element型態的指標,而&array是整個array型態的指標。
Linux下根據這件事來判斷array size的技巧到處都在用,不像windows必定會跟著一個size在傳。所以linux programmer對這件事定不陌生。
總之又學了一課。