二维数组的指针
Pointers of two dimensional array
有这样的代码:
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++中请使用智能指针和标准容器
int main() {
int test[2][3] = { {1,2,3}, {4, 5, 6} };
int (*pnt)[3] = test; //*pnt has type int[3]
//printArray writes array to stdout
printArray(3, *pnt); //returns 1 2 3
printArray(3, *(pnt+1)); //returns 4 5 6
return 0;
}
多维数组实际上是数组的数组,例如test[2][3]是一个包含两个int[3]类型元素的数组,它们依次包含3个整数元素。
在你的例子中,你有一个指向变量指针的指针。
换句话说,你的数组是这样的:
array = {{100}}
- ptr_指向数组
- &ptr_是外部数组 的地址。
- ptr_是第一个元素的地址(它指向另一个数组)
- *ptr_同上
- &(*ptr_)获取外部数组的第一个元素,即内部数组,然后返回内部数组的地址
- **ptr_获取外部数组(即内部数组)的第一个元素,然后对内部数组(即实际值)解引用
相关文章:
- 为什么指针在对二维数组进行排序时无法正常工作?
- 坚持将双指针管理的内存复制到二维数组
- 二维数组中的指针算术
- 为什么这个指针到指针的二维数组像这样分配新的 int
- C++ ->尝试逐字阅读一行文本。如何使指针等效于用于存储输入的当前二维数组
- C++ 二维数组和指针引用
- 指向二维数组的指针
- 如何将二维数组转换为指针中的指针
- 通过指针将二维数组传递给 c++ 中的函数
- 如何在指针表示法和数组表示法中循环遍历二维数组
- 存储二维数组指针的方法是什么
- 二维数组指针
- 从行指针访问二维数组的行索引
- 从函数返回指向二维数组的指针
- 将指向数据的指针作为参数传递给期望二维数组的函数
- 在 Matlab 中调用C++函数,处理二维数组,指针指针
- 无法使用双指针作为函数参数传递二维数组
- 正确分配和取消分配指向对象的指针的二维数组
- 将动态二维数组的返回指针传递给子函数并对该数组进行寻址
- 双指针二维数组声明int** seq=new int* [n];