Re: [问题] C语言的问题

楼主: RealJack   2014-06-27 15:57:07
这篇回得很仔细
不过有一个地方的叙述可能要修正一下
※ 引述《LPH66 (1597463007)》之铭言:
: array 的型态是 int[3][4], 或曰“3x4 的二维 int 阵列”
: 阵列变量在多数状况下会 decay 成指向其首元素的指标
: 于是在式子里因为要计算 array+1 的关系
: 它 decay 成了一个 int(*)[4], 或曰“指向“长 4 的一维 int 阵列”的指标”
: 其指向这个二维阵列的首元素, 即 {10,11,12,13} 这一列
: 故 array+1 就是往后移一列, 是个 int(*)[4] 指向 {4,5,6,7} 这一列
: 接下来是分歧点
: 状况一先取值
: 这里的“值”是一个 int[4], 或曰“长 4 的一维 int 阵列” (注意上面的双重引号)
没错,这里被int(*)[4]指到的值是一个阵列
: 所以 *(array+1) 就是 {4,5,6,7} 这个一维阵列
*(array+1)应该是指到{4,5,6,7}这个阵列首元素的指标,type是int*
上面这两个说法是等价的(阵列的名字 = 指向首元素的指标)
*(array+1)是一个阵列,没有被命名的阵列
虽然*(array+1)没有被命名,但还是提到了一个阵列
所以*(array+1)可以当作阵列的名字,也因此退化成指到阵列首元素的指标
: 再对这个阵列取 [1] 就取到 5 了
: 状况二则是先取 [1], 我们知道对一个指标 p 做 p[1] 等同于 *(p+1)
: ↑
: 所以这里又做了 +1 因此又指到下一列去; 然后这个取值 ──┘
: 得到了一个跟刚才一样的“长 4 的一维 int 阵列”
: 只不过这次得到的是第三列 {18,19,20,21}
: 最后原来式子里的取值则是这个阵列又 decay 成指向这阵列首元素的“int 指标”
: 在此即是指向 18 的指标
: 所以取值就得到 18 了
:

Links booklink

Contact Us: admin [ a t ] ucptt.com