Re: [问题] 2D array的address

楼主: descent (“雄辩是银,沉默是金”)   2018-04-24 17:05:56
int B[2][3];
B 型别可以把他想成 int (*)[3]
##### 这段有点错误, 不要看这段
B 是一个指标, 所以 B + 0 代表一个位址 (400),
B + 1 一样代表一个位址。
B + 0 可以写成 B[0], 所以 B[0] 就是表示一个位址, 而不是阵列的元素 2。
#####
B[0] 等于 *(B+0) 等于 *B, 所以这 2 个是一样的东西。
*B 就有点难解释, int A[2], A 的型别可以想成 int*,
*B 可以想成是 int*, 是代表一个指标。
※ 引述《zzss2003 (brotherD)》之铭言:
: 图片: https://imgur.com/a/8Q7d3GH
: 在这个影集当中,我不懂为什么*B or B[0]是400,不是应该是2吗?
: &B[0][0]是400我能理解,但没办法理解*B与B[0],影片中也没提到为什么
: 自己用了GCC,compile后也是同样结果
: 能请前辈们提供一下线索吗?_?
: 谢谢
作者: zzss2003 (brotherD)   2018-04-24 17:29:00
B的型别应该是int (*)[2][3]吧?打错了,是int [2][3]
楼主: descent (“雄辩是银,沉默是金”)   2018-04-24 17:47:00
和我举例的 A[2] 是类似的意思
作者: LPH66 (-6.2598534e+18f)   2018-04-24 18:18:00
B + 0 应该是 &B[0], 只是在这东西也是阵列之下位址会相同
作者: KanzakiHAria (神崎・H・アリア)   2018-04-24 19:37:00
B的型别就是 int[2][3] 而不是 int*[3]enonrick的文章已经教过简单的判别法sizeof(B) sizeof(B[0]) sizeof(B[0][0])看到连续这几篇文章 C现在来看真的是设计不良连型别都搞错不要乱发文害人rrrrrrrrrrrr
作者: CoNsTaR ((const *))   2018-04-25 00:14:00
不是有 right-left rule 吗?为什么每次都要讲得好像很复杂一样
作者: hunandy14 (Charlott.HonG)   2018-04-25 01:32:00
隐式转换之后才变成变成指标,阵列的型态是"阵列"两者之间比较容易是别的地方是指针不带长度资讯标识别 ((疴怎么还有
作者: loveflames (咕啾咕啾魔法阵)   2018-04-25 09:48:00
阵列就是阵列,不要用指标来误导人谢谢B就是int [2][3],没有别的了
作者: yvb   2018-04-25 13:11:00
我想原PO误把语意当型别, 也就是 K&R C语言 5.7 多维阵列后半节, 或是 C99 C11 6.5.2.1 Array subscripting 第3点(该节Semantics第二段落) 的描述.对初学者来说, 也许讲清楚语意更有助理解.
作者: freef1y3 ( )   2018-04-26 15:44:00
B应该是int [2][3]没错, 不过有一些吊诡的点1. 你不能写 int C[2][3]; C = B;2. void f(int B[2][3]) {...} 那在f里B会变成int(*)[3]

Links booklink

Contact Us: admin [ a t ] ucptt.com