c++ - 二维数组的指针

标签 c++

有这样的代码:

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/

相关文章:

c++ - 使用无 header 的 AES 加密

c++ - 查找 vector 中的最小值和最大值并返回其索引的函数

c++ - 我可以从除子类之外的另一个类调用抽象基类的公共(public)赋值运算符吗?

c++ - 提取 __m128i 中每个 bool 字节的低位? bool 数组到打包位图

C++ 仅在 std::map 中初始化键

c++ - 如何使用 C++11 的最小 gc 支持

c++ - 应用函数后查找重复值的函数

c++ - 如何在 GTK+ 中使用 sleep()

c++ - 使用 CMake 打开链接器标志

c++ - 您如何设计 C++ 应用程序才能使模拟对象最易于使用?