C_and_CPP 板


LINE

※ 引述《huangwh (香腸)》之銘言: : ※ 引述《assyrian (喔耶)》之銘言: : ------------------------------------------------ : : TYPE** array_2D = new TYPE*[n]; : : for(int i=0;i<n;i++){ : : array_2D[i]=new TYPE[n]; : : for(int j=0;j<n;j++){ : : ... : : } : : } : ------------------------------------------------- : 不好意思 : 可以解釋一下嗎? : TYPE** array_2D = new TYPE*[n]; : 謝謝 首先你要知道什麼指標。指標的「值」存的是記憶體的一個位置。所以在剛開始學 指標的時候常常可以看到這段code int a=5; int *b; b=&a; 如此b的「值」是a在記憶體上的「位置」。如果我們輸出*b就可以輸出5,因為*是去 找指標所指到的那個位置(a在記憶體上的位置),然後把存在那個位置裡的東西拿出來 再來說到動態宣告陣列(以下都以int為例,其他date type亦同),那你要先知道陣 列是怎麼搞的。若我們一維陣列宣告為 int array1D[10]; 表示在記憶體上開了連續十個sizeof(int)的空間給了array1D,陣列的名稱array1D 代表array1D在記憶體上開頭的位置(也就是array1D == &array1D == &array1D[0])。 所以我們可以寫 int *ptr1D; ptr1D=array1D; 如此ptr1D的值就會是&array1D,我們也可以用ptr1D[2]來取array1D陣列裡的值了。 再來是二維陣列的宣告,若我們宣告 int array2D[30][10] 表示在記憶體上開了連續30*10也就是300個sizeof(int)的空間給array2D,你可以把 二維陣列想像成很多個一維陣列疊在一起(三維陣列也可想像成很多二維陣列疊在一起) 。對row major的compiler或語言而言(C語言陣列宣告即是),array2D就像是30個 array1D;也就是array2D[i] 都相當於一個array1D,0≦i<20。 所以我們可以把二維陣列看成一個特別的一維陣列,這個一維陣列每一「格」存的都 是「一維陣列」。 / □-----→□□□□□□□□□□ 想像十格(一個array1D)塞在一個「特殊的 | □-----→□□□□□□□□□□ 一維陣列的一格中。 | □-----→□□□□□□□□□□ | □-----→□□□□□□□□□□ 30 □-----→□□□□□□□□□□ 列 . | . | . \ □-----→□□□□□□□□□□ 所以若我們要宣告一個指標來指二維陣列的話,要指的是一個特殊的一維陣列。(一 維陣列要用int *指我們已經知道了)但是這個一維陣列裡面的每一格又都是一個一維陣 列,所以現在我們要指的是int *,所以就用int **去指int * 。摁…好好體會一下= = 如果你array跟pointer的觀念都很好了,那上面就可以不用看了= =。回到正題 : : int** array2Dptr = new int*[30]; : : for(int i=0;i<30;i++){ : : array2Dptr[i]=new int[10]; : : } 以下以動態宣告30*10的int陣列為例 因為是動態宣告,你並沒有宣告,也就是沒有在記憶體上有配置空間給你要開的陣列 ,因此在宣告了int **array2Dptr之後,你要new出int*[30]的空間來讓array2Dptr指, 也就是 array2Dptr ↘ / □→ | □→ 30 □→ | . | . \ □→ 如圖所示,你可以看到array2Dptr[i]都沒有指到東西,因為你沒有給他空間啊!!所以 需要for那段code幫每個array2Dptr[i] new出int[10]大小的空間,這樣就會變成 array2Dptr ↘ / □→□□□□□□□□□□ | □→□□□□□□□□□□ | □→□□□□□□□□□□ | □→□□□□□□□□□□ 30 □→□□□□□□□□□□ 列 . | . | . \ □→□□□□□□□□□□ 你就有空間可以用了啊!!!! 下台一鞠躬 初次po文請多包涵 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.48.211
1F:推 huangwh:謝謝唷!! 11/14 20:50
2F:→ ledia:推一個很清楚! 竟然這麼有閒可以畫精美的圖 Orz 11/15 01:41
3F:→ masterone:推~~好清楚喔!! 12/16 00:08
4F:推 shianhong:謝謝 受益良多 02/22 11:37
5F:推 zooping:推 受益良多 05/15 16:03
optimize:轉錄至看板 NTTU_CSIE99 11/21 13:01







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP