Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法理解二维数组指针中发生了什么_C++_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

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]);