【发布时间】:2023-01-11 02:36:23
【问题描述】:
我正在学习二维数组和它的指针表示。我运行了以下命令来获取二维数组的内部工作。我得到了 arr2d[0] 的奇怪结果
int arr2d[2][3]{{1,2,3},{4,5,6}};
cout<<"&arr2d[0][0] :"<<&arr2d[0][0]<<endl;
cout<<"(&(arr2d[0])) :"<<(&(arr2d[0]))<<" arr2d[0] :"<<arr2d[0]<<endl;
cout<<"*(arr2d[0]) :"<< *(arr2d[0])<<" *(&(arr2d[0])) :"<<*(&(arr2d[0]))<<endl;
输出:
&arr2d[0][0] :0x3e6d7ff6c0
(&(arr2d[0])) :0x44efbffbe0 arr2d[0] :0x44efbffbe0
*(arr2d[0]) :1 *(&(arr2d[0])) :0x44efbffbe0
如果 arr2d[0] 本身是“循环指向”,*(arr2d[0]) 如何将 1 作为输出? 同样显然,指针算法对于 arr[0] 不起作用,因为 arr[0]+1 没有得到一个到 arr[1]。
我没想到 arr[0] 会循环指向自身,我希望它指向长度为 3 的一维数组的指针。this 告诉我会发生这种情况,但我想知道为什么 arr[0] 怎么能指向对自身但同时 *(arr[0]) 给出 1?
【问题讨论】:
-
“指向自身”是什么意思?整个数组,第一行和第一个元素都有相同的地址
-
细节很重要,您发布的代码的输出不是以
12345开头 -
旁注:很多人都知道数组是指向其第一个元素的指针。这不是真的。数组就是数组。它只是将decays 轻松自动地转换为指针。
-
此代码无法生成此输出。请发布minimal reproducible example。