看板 EE_DSnP 關於我們 聯絡資訊
以前就有個問題沒有想清楚 剛好今天老師上到,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