#include<iostream>
#include<iomanip>

void main()
{
  int i,j;
  int pole[3][3]={1,2,3,4,5,6,7,8,9};
  *(*(pole+2)+2)=0;

  for(i=0; i<3;i++)
  {
        for(j=0;j<3;j++)
        {
               cout << setw(5)<< pole[i][j];
        }
        cout << endl;
  }
}

这是我的程序,我得到的输出如下:
1 2 3

4 5 6

7 8 0

但是,我无法理解这条线的确切含义:
  *(*(pole+2)+2)=0;

在我的理解中,它是一个指向数组指针的指针,所以基本上,我们首先要做的是:
*(pole+2)

它指向数组的第二个元素。然后
*(*(pole+2)+2)

哪个指向数组的第 4 个元素?这样对吗?如果是这样,我们如何将最后一个 [3][3] 元素更改为 0?

谢谢你。

最佳答案

这里 pole 是一个 3 行 3 列的二维数组。因此,当数组索引从 0 开始时,您正在分配 pole[2][2] = 0 这实际上意味着 0 被分配给第 3 行和第 3 列元素。
*(*(pole+2)+2) == *(pole[2] + 2) == pole[2][2]

关于c++ - 数组指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22021231/

10-11 21:41