为什么我不应该使用标准循环来访问动态数组?

Why should I not use a standard loop to access a dynamic array?

我刚开始学习C++。我正在查看访问数组的一个示例,示例如下:

a[i][j];
*(&a[0] [0]+2*i+j); /* Base address */
*(*(a+i)+j);

我对这个例子有点困惑。为什么我不能像下面这样创建一个标准循环:

for(int row=0; row<i; row++ ){
    for(int col=0; col<j; col++ ){
       // Do something
    }
}

在访问任何一维数组时,我看到 2 个标准选项:

其中一个是您的答案中包含的那个:

a[i]

第二个:

*(a + i)

但是,当涉及到 two-dimensional 数组时,我只会使用方括号:

a[i][j]

为什么?因为使用指针表达式的上述表达式的等价物如下所示:

*(*(a + i) + j)

差不多self-explanatory我想。

您还询问了有关访问数组元素的问题。所以我真的不知道循环部分是关于什么的^^

您的示例列出了 3 种不同的方法来访问 multi-dimensional 数组中(大概)相同索引处的对象。这是您将在循环内执行的操作。所以要么做:

for(int row=0; row<i; row++ ){
  for(int col=0; col<j; col++ ){
     auto field = a[col][row];
  }
}

for(int row=0; row<i; row++ ){
  for(int col=0; col<j; col++ ){
     auto field = *(*(a+col)+row);
  }
}

for(int row=0; row<i; row++ ){
  for(int col=0; col<j; col++ ){
     auto field = *(&a[0] [0]+2*col+row);
  }
}