Re: [问题] C++阵列宣告4维,但用2维存取时会怎样?

楼主: amamoimi (佛仔)   2023-11-13 21:56:48
※ 引述《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会不一样勒...
谢谢大家...

Links booklink

Contact Us: admin [ a t ] ucptt.com