有这样的代码:
int (*ptr_)[1] = new int[1][1];
ptr_[0][0] = 100;
std::cout << "to: " << &ptr_ << ' ' << ptr_ << ' ' << *ptr_ << ' ' << &(*ptr_) << ' ' << **ptr_ << std::endl;
结果是:
to: 0xbfda6db4 0x9ee9028 0x9ee9028 0x9ee9028 100
为什么 ptr_ 和 *ptr_ 的值相同? ptr_ 的值等于 0x9ee9028,所以存储单元 0x9ee9028 的值是 *ptr_ 也就是 0x9ee9028,但是 **ptr_ 给出结果 100。这合乎逻辑吗?
最佳答案
ptr_
是指向长度为 1 的数组的指针。 C 和 C++ 中数组类型的变量在打印时(除其他外)简单地退化为指针。因此,当您打印 ptr_
时,您将获得数组的地址。当您打印 *ptr_
时,您会得到数组本身,然后它会再次降级为同一个指针。
但在 C++ 中请使用智能指针和标准容器。
关于c++ - 二维数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612834/