我有以下的代码:
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是一个指向整数的二维数组的指针,它指向一个虚构的地址400。因此,如果我解引用一次,我得到一个指向大小为2的一维数组的指针,仍然指向地址400。
我的第一个问题是:使用“常规”指针时,解引用会给出存储在所指地址上的值。对于多维数组来说不是这样吗?因为存储在地址400上的值显然是1,而不是400(至少从A和*A看,我认为可以这样假设)。
第二个问题是关于代码块中的最后一个cout。如果我输入A[0][1],我会得到一个“指向整数类型的指针”,对吧?那么再次解引用将给我虚构地址408处的值3。如果我像之前那样引用这个指向整数的指针会怎么样呢?我知道它只会给出它所指向的(第二个)一维数组的第一个值的地址(即408),但我该如何解释这个呢?在内存位置408上,显然存储着一个整数(即3)。但是,仅仅看表达式&A[0][1]给出地址408,人们可能会认为位置408存储了一个指向整数类型的指针。
我知道这些问题可能有点混乱甚至不太具体,但也许有人能帮助我理解。
谢谢! :-)
std::array
或者std::vector
而不是C风格的数组。 - Jesper Juhl