作者BBSealion (海獅)
看板EE_DSnP
標題[問題] 有關指標的問題
時間Thu Oct 7 00:17:11 2010
以前就有個問題沒有想清楚
剛好今天老師上到,po在這請教大家一下
---
今天宣告一個雙層array :int arr[3][5] = {10,20,30, .......}
以下四行指令,竟然會顯示相同的結果?
cout << &arr[0][0];
cout << &arr[0];
cout << arr[0];
cout << arr;
都一樣顯示出一個位址(在我家是 0x22ff10)
感覺實在挺沒道理的
(1=3,2=4還算合理,但全部相同就是不太舒服orz)
也就是說arr = 0x22ff10 是一個位址
但用*取arr的值的話(*arr)還是會出現同樣的東西(地址) *arr = arr = 0x22ff10
再取一次(**arr)才會給你arr[0][0]的值(ex:10)
這樣不會有記憶體位址打架的問題嗎!?
同樣對0x22ff10這個位址,用*取值,一次還是給我0x22ff10,一次卻給我該位址的值
---
ps:改用動態宣告問題就解決了
(給另任意p,q)
int **c = new int*[p];
for (int i=0;i<p;i++){
c[i] = new int[q];
for (int j=0;j<q;j++){
*(c[i]+j) = 100*i+j*j;
}
}
以下四行指令
cout << &c[0][0] ;
cout << &c[0] ;
cout << c[0] ;
cout << c ;
第一行結果=第三行結果=0x2e24a0
第二行結果=第四行結果=0x2e2470
---
請問有人能解釋一下直接宣告雙層array發生的問題嗎QQ?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.226.151