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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP