作者amamoimi (佛仔)
看板Programming
标题Re: [问题] C++阵列宣告4维,但用2维存取时会怎样?
时间Mon Nov 13 21:56:48 2023
※ 引述《cycutom (cycutom真的不出门的那漳)》之铭言
: 看到一个考试题目:
: int main() {
: int a[10][20][30][40];
: cout<<"a="<<a[5][5]-a[0][0]<<endl;
: cout<<"b="<<&a[5][5]-&a[0][0]<<endl;
: cout<<"c="<<a[5]-a[0]<<endl;
: }
: 求结果:
: 答案为:
: a=3150
: b=105
: c=100
: 首先我不太能理解时,我以往的概念是,你宣告了4维阵列
: 你在存取时一样要用4维,不然会报错
: 而存取时只用3维或2维,此时程式会怎麽判断?我无法理解,老师也没教过
: 再来,我理解「位址相减」的逻辑
: 假设就本文的题目宣告了4维阵列 [10][20][30][40]
: 比如 阵列 &a[0][0][0][1] - a[0][0][0][1] 会等於 1
: &a[0][0][1][0] - a[0][0][0][0] 会等於 40
: 以上能理解
: 但比如用 a[5][5] - a[0][0] 照理此时是里面的值相减吧?怎麽会变「位址相减」?
: 然後我知道 a[5][5] - a[0][0] 会等於 &a[5][5][0] - &a[0][0][0]
: 这是什麽意思啊?为何会这样等於?
: 另外明明要用 &a[0][0][0][1] 4维这样比对照到宣告时的[10][20][30][40]
: 那只用个 &a[0][1][0] 要如何跟 [10][20][30][40] 对照到?
https://onlinegdb.com/c8o-kmc9-
我把他拿去美化了一下
我想问一下...
就cout出的结果来看
a[5][5]跟&a[5][5]是一样的
a[0][0]跟&a[0][0]是一样的
那为什麽a跟b会不一样勒...
谢谢大家...
----
Sent from
BePTT on my OPPO CPH1943
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.78.70.250 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1699883810.A.3C6.html
1F:→ LPH66: 阵列位址问题一律请一并考虑型态123.194.181.180 11/14 00:45
2F:→ LPH66: 只有数字一样不代表是有同样意义的值123.194.181.180 11/14 00:46
3F:→ amamoimi: 喔喔我了解L大的意思了 112.78.70.250 11/14 10:00
4F:→ amamoimi: 这题目蛮有趣的耶 112.78.70.250 11/14 10:00
5F:→ kisaraki1976: 不管几维,在组合语言下一律都是一114.137.141.178 12/09 13:20
6F:→ kisaraki1976: 维114.137.141.178 12/09 13:20