C++ 无法理解二维数组指针中发生了什么
我是指针的新手,在试图理解指针的过程中遇到了一些问题。C++ 无法理解二维数组指针中发生了什么,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,我是指针的新手,在试图理解指针的过程中遇到了一些问题。 我想要一个指向二维数组的指针,所以我尝试了- int arr[2][3] = {{12,23,4},{323,43,3}}; int (*ptr)[3] = arr; // a pointer to the first element of array. //The first element of array is an array of 3 ints. 现在我查了一下这个问题。我对解决方案不
我想要一个指向二维数组的指针,所以我尝试了-
int arr[2][3] = {{12,23,4},{323,43,3}};
int (*ptr)[3] = arr; // a pointer to the first element of array.
//The first element of array is an array of 3 ints.
现在我查了一下这个问题。我对解决方案不是100%满意。所以我自己做了一些检查,看看会发生什么。
我运行了以下代码-std::cout<<ptr<<std::endl;
std::cout<<*ptr<<std::endl;
两次显示相同的输出时,指针的地址和反引用后的值如何相同,这种行为类似于双指针吗?类似的解释将非常有用。数组可能会衰减为指针。事实上,你在写作时使用了这个事实:
int (*ptr)[3] = arr;
ptr
是“指向数组第一个元素的指针”。二维数组arr
在您使用它初始化ptr
时衰减为指向其第一个元素的指针
当您延迟ptr
时,您将获得第一个元素(属于arr
),一个1D数组,并通过
std::cout << *ptr << std::endl;
你可能会发现这个问题的答案很有用。谢谢你,我在洗澡的时候也考虑过这个问题,并且有点明白了。
std::cout << *ptr << std::endl;
int (*p)[3] = a; // as before
int (*p)[3] = &(a[0]);