[問題] 關於array的位址

看板C_and_CPP作者 (慢跑中毒)時間14年前 (2011/05/18 12:52), 編輯推噓4(4028)
留言32則, 9人參與, 最新討論串1/1
大家好 我寫了一個如下的程式 想要找出array這個指標的本身位址(非其指向的位址) 結果發現 array本身的位址跟陣列第一個元素的位址是一樣的 都是 0x43f008 就我的認知 array應該是一個指向第一個元素的指標 所以本身的位址 應該不是第一個元素的位址吧? 另外 array應該是個雙重指標 指向另外兩個指標array[0]與 array[1]嗎? 請教大家了 int array[2][2]={{1,2},{3,4}}; cout <<" array[0]'s address is: "<<&array[0]<<"\n"; cout <<" array[0][0]'s address is: "<<&array[0][0]<<"\n"; cout <<" array's address is: "<<&array<<"\n"; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.209.1

05/18 12:57, , 1F
array name 不是指標。去學 Debugger 怎麼用
05/18 12:57, 1F

05/18 12:59, , 2F
array != 指標;二維array != 雙重指標
05/18 12:59, 2F

05/18 12:59, , 3F
int arr[10]; 與 int *ptr = &arr[0]; 其實差很多 XD
05/18 12:59, 3F

05/18 13:00, , 4F
(HTC的面試有問這一題)
05/18 13:00, 4F

05/18 13:00, , 5F
第十二誡
05/18 13:00, 5F

05/18 13:16, , 6F
二維array是一個指標指向一維陣列ex int (*array)[2]
05/18 13:16, 6F

05/18 13:20, , 7F
array的位置跟第一個元素的位置一樣,而且很奇妙的是
05/18 13:20, 7F

05/18 13:22, , 8F
一開始array是指向第一個元素,也就是說array本身和指向
05/18 13:22, 8F

05/18 13:23, , 9F
的位置是相同的.
05/18 13:23, 9F

05/18 13:24, , 10F
陣列 != 指標, 二維陣列 = array of arrays
05/18 13:24, 10F

05/18 13:28, , 11F
位址會一樣是因為&在這些物件(函式)上有特殊定義
05/18 13:28, 11F

05/18 13:28, , 12F
array name 是位址,但這個位址可以 decay 成 "類" 指標
05/18 13:28, 12F

05/18 13:28, , 13F
進行跟同型態指標一樣的指標運算,關鍵差別是真的指標會
05/18 13:28, 13F

05/18 13:29, , 14F
額外用一個記憶體去記錄這個位址,而 array name 則否
05/18 13:29, 14F

05/18 13:38, , 15F
http://0rz.tw/32439 這裡面有二維陣列的觀念
05/18 13:38, 15F

05/18 13:43, , 16F
上面的網站把二維陣列稱為雙重指標常數 好像怪怪的
05/18 13:43, 16F

05/18 13:44, , 17F
我怎記得宣告成[][]的話 實做上還是一維的 除非是用**
05/18 13:44, 17F

05/18 13:53, , 18F
http://goo.gl/IwpPK 我都啃這個, 才不會被誤導!
05/18 13:53, 18F
感謝大家的指教 我剛剛看了第十三誡XD 裡面有提到 int a[5][10] 要傳入函數 需視為一維陣列(就可以使用類指標的概念) 而這個一維陣列的元素 為int [10] 所以寫成 void pass2DArray(int (*array)[10]); 那想請問的是 函式原型該如何宣告? ※ 編輯: wandog 來自: 59.125.209.1 (05/18 13:59)

05/18 14:00, , 19F
spec. 頗生嫩 不太好肯 XD
05/18 14:00, 19F

05/18 14:02, , 20F
不要再出現生嫩的字眼了,我也覺得雙重指標常數怪怪的
05/18 14:02, 20F

05/18 14:03, , 21F
函式原型是指? 參數? 引數?
05/18 14:03, 21F

05/18 14:05, , 22F
要放在MAIN前面的原型宣告
05/18 14:05, 22F

05/18 14:06, , 23F
應該不是寫成void pass2DArray(int [10] *)吧..
05/18 14:06, 23F

05/18 14:09, , 24F
好像是寫成 void pass2DArray(int (*)[10]);
05/18 14:09, 24F

05/18 14:13, , 25F
void pass2DArray(int (*array)[10])<==就這樣宣告
05/18 14:13, 25F

05/18 14:14, , 26F
void pass2DArray(int (*)[10])<=這樣宣告,你要怎麼操作
05/18 14:14, 26F

05/18 14:15, , 27F
二維陣列
05/18 14:15, 27F

05/18 14:19, , 28F
我很努力看我之前的推文和你後來多打的字,哪邊出現
05/18 14:19, 28F

05/18 14:19, , 29F
int [10] *<==?
05/18 14:19, 29F

05/18 14:26, , 30F
抱歉 我應該統一用修改文章的方式回覆...
05/18 14:26, 30F

05/19 10:03, , 31F
版主高手都肯這麼可怕的東西...(抖)
05/19 10:03, 31F

05/19 11:46, , 32F
所以他才是版主阿,這很合理
05/19 11:46, 32F
文章代碼(AID): #1Dqr2OOe (C_and_CPP)