当arr是2d数组时,arr[]的奇怪行为

  • 本文关键字:arr 2d 数组 c++ arrays pointers
  • 更新时间 :
  • 英文 :


我正在学习2D数组和它的指针表示。我运行以下代码来获得2d数组的内部工作。对于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])有1作为输出,如果arr2d[0]是"循环指向";本身?很明显,指针算法对arr[0]不起作用,因为arr[0]+1不会得到一个到arr[1]。

我不希望arr[0]循环指向自己,我希望它指向一个长度为3的1D数组的指针。这告诉我们这发生了,但我想知道为什么arr[0]指向自身同时*(arr[0])给出1?

如果arr2d[0]是"循环指向",*(arr2d[0])怎么可能有1作为输出?本身?

它没有指向自身。数组不是指针,但像任何变量一样,它们有一个地址,数组的地址与第一个元素的地址相同。这扩展到多维数组,因此arr2d,arr2d[0]arr2d[0][0]都有相同的地址,尽管它们的类型不同。

显然指针算法对arr[0]不起作用,因为arr[0]+1没有得到一个到arr[1]

arr2d[0]衰减为&arr2d[0][0],则aarr2drr[0]+1&arr2d[0][0]+1,与arr2d[0][1]相同。如果您使用了表达式arr2d + 1,那么它将与&arr2d[0] + 1相同,从而得到arr2d[1]

相关内容

  • 没有找到相关文章

最新更新