Re: [問題] 用指標傳遞2維陣列

看板Programming作者 ((short)(-15074))時間14年前 (2009/10/03 08:05), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《mVictory (時間)》之銘言: : int arr[][3] = {1,2,3, : 4,5,6, : 7,8,9}; : void func(int **aptr){ : printf("*aptr=%u",*aptr); : } : main(void){ : func((int **)arr); : } : 上述程式透過 type cast 將2維陣列arr 轉成 2階指標傳給 void func(int **), : 執行結果 *aptr = 1。 : 我的問題是: : 2階指標 取值一次(*aptr)應該是存放 address, : 這邊為何就已經是 value ? 那不是「已經是 value」,而是被(錯誤地)當成 address 的 value。 二階指標是表示你這個指標指向的東西是個指標, 所以這裡 *aptr 其實形態仍然是 int *,只不過是指標值為 1 而已。 你可以試著做 (*aptr)++; 之後去查看其值,會發現值變成 5 而非 2, 這正是它仍舊是個指標的證據。 --- 另外,傳二維陣列不是這樣傳的。 int ** 形式的二維陣列和 int [][3] 形式的二維陣列兩個的結構根本不一樣, 不可能會有簡單的方法在兩者之間互轉, 雖然它們都能用 arr[2][1] 的方式去存取,但做的事情是不一樣的。 -- **** 說: 不要期望一個精神力差不多已經見底的人阿Orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.92 ※ 編輯: LPH66 來自: 140.112.28.92 (10/03 08:06)

10/03 11:01, , 1F
原程式改了++(*aptr)後.我大概了解了THX!
10/03 11:01, 1F
文章代碼(AID): #1AnfL6XJ (Programming)
文章代碼(AID): #1AnfL6XJ (Programming)