作者cutekid (可爱小孩子)
看板Programming
标题Re: [问题]阵列本身加减问题
时间Fri Nov 16 02:27:45 2018
宣告 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
: 我的问题是想请问,阵列没设值情况下,直接给指定索引,到底是什麽意思?
: 原题目是要问元素个数?然後只适用在四维阵列吗?
: 原题目输出是怎麽出来的?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.223.62.12
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1542306468.A.54B.html
※ 编辑: cutekid (61.223.62.12), 11/16/2018 02:41:04