Hel*_*bye 4 c++ pointers multidimensional-array
有人可以向我解释这里发生了什么吗?考虑一下代码
#include <iostream>
int main()
{
int A[2][2] = {{0}};
std::cout << A << std::endl; // First stdout line
std::cout << *A << std::endl; // Second stdout line
std::cout << *(*A) << std::endl; // Third stdout line
}
Run Code Online (Sandbox Code Playgroud)
(试试这里的代码!)
在我看来,A应该是一个2个指向数组的数组,每个指针应包含2个指向ints的指针.但是,在运行代码时,会将以下内容写入stdout:
0x7a665507cf80
0x7a665507cf80
0
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是第一个元素的内存地址A(在第一个stdout行上打印)与第一个元素的内存地址相同*A.这怎么可能,考虑到这一点,A并且*A显然是两个不同的阵列(因为解除引用A并*A给出不同的结果)?
对输出的另一种解释是,内存地址0x7a665507cf80要么包含值0x7a665507cf80(即位于该位置的指针 - 在这种情况下A指向自身的点),或者0取决于是否从中访问,A或者*A也不是对我有意义.
int A[2][2] = {{0}}; 这是一个静态的2D数组,它不是指向指针的指针,它只是一个具有特殊访问权限的一维数组.
事实上它不是指向指针,而是1D数组上的2D数组意味着A[0]或*A访问数组并返回作为第一行的1D数组.然后第二次去引用得到实际值.如果你有,这可以概括为nD int A[x][y][z][t]....
所以前两个是"相同"的地址,但它们不是同一类型.