C_and_CPP 板


LINE

※ 引述《edash (团长)》之铭言: : ※ 引述《edash (团长)》之铭言: : : 书上写说 &array[i][j] 相等於 *(array + i) + j : : 我想了解的是 : : 既然 array[i] 跟 array + i 一样 (我有印出来看过) : : 为什麽 *array[i] 和 *(array + i) 不一样呢?? : : 前者印出来就是 array[i][0] , 但後者印出来仍然长的跟原本一模一样 : : 又 : : 就我的印象中 : : 二维阵列在电脑中其实也是个一维阵列 是的。例如 char a[3][2]; 是 3 个元素的一维阵列,它的 元素的 type 是 char[2] 也就是两个 char 元素的阵列。 : : 所以我觉得 array + i 应该就是 (&array[0][0]) + i ^ ^ 不是的。请再弄清楚 (pointer + 整数) 的意义。 那个整数 i 并不是 i 个 1 byte , 而是以 pointer 所指的 元素的大小为单位。前面那个 i 和後面那个 i 的单位是不 一样的。以 char a[3][2] 为例, a + 1; a 在这里是指向 a阵列的第 0 个元素,该元素是 char[2],2 bytes 大。 a + 1 以後,就要加 1*2 bytes 指向第 1 个 char[2] 元素。 (&a[0][0]) + 1; a[0][0] 就只是个 char, 前面加上 &, 取它的位址, 其 type 就是 char*, 也就是指向 char (1 byte 大) 的指标,它 + 1 就是加 1*1 bytes, 指向第 0 个 char[2] 元素里面的第 1 个元素。 : : 但实际上 array[i] 却是指向 array[i][0] 所在的位址?? : : ---------------- : : 想请了解问题的大大帮忙解答一下 : : 谢谢~~ : : 我用的 compiler 是 Dev-C++ : 这是我的程式码: : #include<iostream> : using namespace std; : int main(){ : int a[3][4]; : cout << *(a[1]) <<" "<< a[1][0] <<endl; : cout << a+1 <<" "<< a[1] <<endl; : cout << *(a+1) <<" "<< a[1][0] <<endl; : system("PAUSE"); : } : 以下是输出: : 2009109320 2009109320 : 0x22ff50 0x22ff50 : 0x22ff50 2009109320 : 请按任意键继续 . . . : ---------------- : 可以看到 a+1 和 *(a+1) 长的一样,这是我所不懂的 a 本质上是阵列,type 为 int[3][4]。当你使用 a 时,大部份的 情形下,它都会变为指向第 0 个元素 int[4] 的指标,所以 a 的 type 会变成 int (*)[4] a+1 的意义如前述是指向第 1 个(不是第 0 个) int[4] 元素的指标, 其 type 是 int (*)[4] 将它的前面加上 *, 变成 *(a+1) 就是 dereference 它,结果就是 int[4]这个元素本身,这个元素本身的 type 刚好也是个阵列,type 为阵列的东西,在大部份的情形下都会变成指向阵列第 0 个元素的指标, 就是 int*, 和 a+1 这个指标都指向同一点,所以位址值一样。但其实 type 不一样。 : 还有 a+1 和 a[1] 长的一样,但 *(a+1) 却和 *(a[1]) 不同 a[1] 就是第 1 个 int[4] 元素本身, cout << 时,变成指标, type 为 int*,输出的是位址值。 *(a[1]) 是 dereference 这个 int*,就是提取它所指的整数值了。 当然 cout << 就印出该整数值。 : 我想这些大概就是我不了解的地方了 这个问题实在很难解释。 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.208.168
1F:推 edash:先感谢一下大大,不过我最近真的看到快头晕了说 220.136.17.114 08/18
2F:→ edash:我想说过几天再来吸收一下,到时有疑问再来请教 220.136.17.114 08/18
3F:→ edash:谢谢 220.136.17.114 08/18
4F:推 edash:乍看之下有点了解却又不太了解 220.136.16.187 08/21
5F:→ edash:我相信大大已点出了问题的症结 220.136.16.187 08/21
6F:→ edash:相信我快要能完全吸收,谢谢 220.136.16.187 08/21







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

请输入看板名称,例如:Boy-Girl站内搜寻

TOP