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

楼主: cycutom (cycutom)   2021-12-02 14:51:36
看到一个考试题目:
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]  对照到?

Links booklink

Contact Us: admin [ a t ] ucptt.com