C++中指针和数组的地址和值

问题描述 投票:0回答:0

我有以下代码:

int main()
{
    int A[2][2][2] =
    {
    {{1, 2}, {3, 4}},
    {{4, 5}, {5, 6}}
    };
    cout << A << endl; // assume it's 400
    cout << *A << endl; // 400
    cout << **A << endl; // 400
    cout << ***A << endl; // 1

        cout << &A[0][1] << endl; // 408

}

所以数组显然与指针共享很多属性 - 如果我错了,请纠正我,但在这种情况下, A 是一个指向 2 维整数数组的指针,它指向虚构的地址 400。所以如果我取消引用一旦我得到一个指向大小为 2 的 1 维数组的指针,仍然指向地址 400。

我的第一个问题如下:使用“常规”指针,取消引用给出存储在指向的地址处的值。多维数组并非如此,对吗?因为存储在地址 400 处的值显然是 1,而不是 400(我认为至少可以以某种方式假设查看 A 和 *A)。

第二个问题是关于代码块中最后一个cout。如果我输入 A[0][1] 我会得到一个“指向整数类型的东西”,对吧?因此,再次取消引用将在虚构地址 408 处给我值 3。如果我像以前一样引用这个整数指针会怎么样?我知道它只是给出了它所指向的(第二个)1-dim 数组的第一个值的地址(所以 408),但是我如何解释它?在内存位置408中,显然存储了一个整数(即3)。但同样,仅查看给出地址 408 的表达式 &A[0][1],人们可能会认为位置 408 存储了一个指向整数类型的指针。

我知道这些问题可能有点令人困惑,甚至不具体,但也许有人有一些话可以帮助我解决这个问题。

谢谢! :-)

c++ arrays pointers memory
© www.soinside.com 2019 - 2024. All rights reserved.