繁体   English   中英

多维数组的算术运算

[英]Arithmetic operation on multidimensional array

我正在对多维数组进行一些算术运算。 还使用C ++尝试了一些代码。 但是,我的代码输出与我对不同指针与多维数组之间的关系的理论理解相矛盾。

我对2D和3D阵列的理解。

2D阵列

1) 在此处输入图片说明 同样,通过使用取消引用运算符

2) 在此处输入图片说明

3D阵列

3) 在此处输入图片说明 同样,通过使用取消引用运算符

4) 在此处输入图片说明

我对B和C分别指向图2和4感到困惑。

二维数组上的代码

#include <iostream>
using namespace std;

int main(void){



    int B[2][2] = {1, 2, 3, 4};
    cout << B << endl;
    cout << B+1 << endl;
    return 0;
}

输出:

0x7ffec3dd9f80

0x7ffec3dd9f88

在这里,指向int B的指针增加了((1 * 4)+(1 * 4))= 8个单位,它是指向int(B + 1)的指针。 尽管我从Link那里得到了一个关于B实际指向2D数组的解释。 它指向2D数组的第一个元素。

我的代码输出和此链接上的说明使我感到困惑。 B在二维数组中实际上指向什么? 并且,如果B指向2D数组的第一个元素的地址,那么为什么当我们加1时B的值增加8个单位? 为什么不增加(1 * 4)单位?

3D阵列上的代码

#include <iostream>
using namespace std;

int main(void){



    int C[2][2][2] = {{
                    {1, 2},
                    {3, 4}
                  },
                  {
                    {1, 2},
                    {3, 4}
                  }};

    cout << C << endl;
    cout << C[0] << endl;
    cout << C[0] +1 << endl;
    cout << C[0][0] +1 << endl;
    return 0;
}

输出:

0x7ffeac58d130

0x7ffeac58d130

0x7ffeac58d138

0x7ffeac58d134

C给出整个数组的起始地址。 但是,它具体指出了哪一部分? 它指向&C [0]或&C [0] [0]还是&C [0] [0] [0]?

cout << C[0]+1 << endl; here, C[0] is increased by 8 unit. But, if C[0] is pointing the base address of 1st 2D array inside 3D array, then it must be increased by 16 unit to get base &C[1].

cout << C[0][0] +1 << endl; here, C[0][0] is increased by 4 unit. But if it is pointing the base address of 1st 1D array of 1st 2D array inside 3D array, then it must be increased by 8 unit to get base &C[0][1].

谢谢。

图1和3是正确的图2和4不是正确的。 *BB[0]的定义完全相同。 **BB[0][0]

因此,要修复图2,实际上是复制图1,但只需将文本B[0]更改为*B ,依此类推。 B本身是指整个数组。 图4的同上。

B+1被定义为&(B[1])含义,它表示一个临时指针,该指针指向您在图1中正确标记为B[1]的对象。

cout << B << endl; ,将B视为说B+0 (即&(B[0]) )。 当您在需要指针的上下文中使用数组时,会发生这种情况(创建了一个临时指针,它的行为与您写过&B[0]而不是B )。 该语句不输出B,而是输出该临时指针的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM