精華區beta Programming 關於我們 聯絡資訊
※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言: > ※ 引述《junshung@kkcity.com.tw (... (b) pic)》之銘言: > > > > 如 > > int ptr[2]={0,1}; > > int *array ; > > array=ptr ; //書上寫:ptr給array位址 > > 但如果今天是二維 (或2維以上) > > int ptr[2][2]={{0,1},{2,3}}; > > int **array; > > array=ptr ; > > 請問這樣寫為啥不能 > > 因為如果我要將一個2維矩陣 傳到一個函式 不是要傳位址ㄇ > > 但我一直有錯 =.=   > > 一直卡在這裡 >”<  一唯都能  二維以上都不能 > > (唉 要把矩陣方面的公式寫成函式 有點小挫折) > 因為 int [2][2] 跟 int ** 是不同的 type, > 兩者之間也不可以互相轉換, > 在 C++ 這種 strict type checking 語言是不允許的, > 不過在 C 可以這麼做。 > 這樣寫就能通過編譯了: > array = reinterpret_cast<int **>(ptr); > 不過這並不是好的做法, > 對正確觀念也會有所影響; > 正式的寫法應該是, > 你將 array 這個 pointer 宣告為 int (*) [2]: > int ptr[2][2]; > int (*array)[2]; > array = ptr; > 順帶一提,你把變數名稱取反了, > 不過為避免混亂就照你原先的命名寫。 謝謝你 ^^, 但我不太懂 int(*)[2] 這種宣告方式 (可能是我的書或我的理解太差了=.=) 還有你的意思是說 int[2] (一維來說的話) 跟int*是同一種type囉 那又是為啥ㄋ? -- ┌─────KKCITY─────┐ KKBOX 可立刻 聽音樂 ■ bbs.kkcity.com.tw ■■所有想找的歌通通不必等 ■■ └──From:140.118.4.95 ──┘ http://www.kkbox.com.tw --