作者sotuda (闲来无事)
看板Examination
标题[课业] 105高考-程式设计考古题
时间Thu Apr 9 18:26:22 2020
请问下列C语言程式码执行後输出结果为何?
int main(void) {
double d[10][20][30][40];
printf("%d\n", (int)(d-&d[3]));
printf("%d\n", (int)(d[3][4]-d[5][8]));
}
用C run过
答案分别是
-3
-1320
---------------
我的理解是在考"位址"
所以假设
初始位址Lo=d[0][0][0][0]是0
元素大小d是8 (因为是double型态)
1. d-&d[3]
首先,d[3]的偏移是3*20*30*40=72000
则位址是 Lo+72000*d=0+72000*8=576000
所以,d-&d[3] = &d[0]-&d[3] = 0-576000 = -576000
2. d[3][4]-d[5][8]
d[3][4]的偏移是 3*20*30*40 + 4*30*40 = 72000+4800 = 76800
则位址是 Lo+76800*d = 0+76800*8 = 614400
d[5][8]的偏移是 5*20*30*40 + 8*30*40 = 120000+9600 = 129600
则位址是 Lo+129600*d = 0+129600*8 = 1036800
所以,d[3][4]-d[5][8] = 614400-1036800 = -422400
-------------
我有看过高上的解答,但还是看不懂上面的说明,
所以想请教各位大大,我的想法哪边有错误?
这一题要如何解呢?(希望可以有详细一点的过程^^)
感谢!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.141.181.14 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Examination/M.1586427984.A.6CE.html
1F:→ yahooc: 有把答案贴给你了,还有文中pi 题目是错的 04/09 18:39
2F:→ yahooc: 内文po 的题目是错的,所以也不会有正确的答案 04/09 18:40
3F:→ sotuda: 是指高考的题目是错的吗?答案在? 04/09 21:36
4F:推 yahooc: 我弄错了,请原谅我,文中答案正解 04/09 22:06