【发布时间】:2019-05-30 03:52:48
【问题描述】:
我正在对多维数组进行一些算术运算。还尝试了一些使用 C++ 的代码。但是,我的代码输出与我对不同指针和多维数组之间关系的理论理解相矛盾。
我对 2D 和 3D 数组的理解。
二维数组
3D 阵列
我对图 2 和图 4 中的 B 和 C 分别指向什么感到困惑。
二维数组上的代码
#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 点的解释。它指向二维数组的第一个元素。
我的代码输出和对此Link 的解释让我感到困惑。 二维数组中的 B 点实际上是什么? 而且,如果 B 指向二维数组的第一个元素的地址,那么为什么 B 的值在我们加 1 时会增加 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].
谢谢。
【问题讨论】:
标签: c++ pointers multidimensional-array