Re: [问题]阵列本身加减问题

楼主: cutekid (可爱小孩子)   2018-11-16 02:27:45
宣告 int a[10][20][30][40]
以下假设:
1. a 起始位址为 0
2. int 占一个 Byte
开始计算:
a[5][5] = 5 * 20 * 30 * 40 + 5 * 30 * 40 = 126000
a[0][0] = 0
a[5][5] - a[0][0] = (126000 - 0)/40(注) = 3150
注: a[5][5],a[0][0] 型态是 int(*)[40],位移量 = 40 个 int
&a[5][5] = a[5][5] = 126000
&a[0][0] = a[0][0] = 0
&a[5][5] - &a[0][0] = (126000 - 0)/(30 * 40) = 105
注: &a[5][5],&a[0][0] 型态是 int(*)[30][40],位移量 = 30 * 40 个 int
a[5] = 5 * 20 * 30 * 40 = 120000
a[0] = 0
a[5] - a[0] = (120000 - 0)/(30 * 40) = 100
注: a[5],a[0] 型态是 int(*)[30][40],位移量 = 30 * 40 个 int
结论: 1. 先算出各别内存位址得到位址差
2. 位址差 / 型态位移量 = 总位移量
※ 引述《glass0520 (快乐就好)》之铭言:
: 此程式码来源是106地特4等程式设计考题
: 题目问输出为何?
: https://imgur.com/oJU522G.jpg
: 这是我直接复制贴上直接跑出来的答案
: https://imgur.com/XPwfbC7.jpg
: 我直接把每个输出出来
: 本来想说是要问元素个数,但四维阵列我难解析,数字也颇大
: 所以我用二维试试...如下
: https://imgur.com/FfheL6a.jpg
: 结果a[5][5] a[0][0] 跑出来的不是内存位址!
: 下面两个算式,我想大概是元素个数...
: &a[5][5]-&a[0][0]大概是 d8c-cb0 -> dc ->16*d+c -> 220/4 -> 55
: a[5]-a[0]也符合 d78-cb0 -> c8 -> 16*c+8 -> 200/4 ->50
: 接下来我又试试一维阵列直接a[0]~a[5]输出样子...
: https://imgur.com/1217fOa.jpg
: 我的问题是想请问,阵列没设值情况下,直接给指定索引,到底是什么意思?
: 原题目是要问元素个数?然后只适用在四维阵列吗?
: 原题目输出是怎么出来的?

Links booklink

Contact Us: admin [ a t ] ucptt.com