Re: [問題] 用指標傳遞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
10/03 11:01, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):