我正在尝试使用C++中的指针访问多维数组的元素:

#include<iostream>

int main() {

  int ia[3][4] = {
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11}
  };

  int (*pia)[4] = &ia[1];
  std::cout << *pia[0]
    << *pia[1]
    << *pia[2]
    << *pia[3]
    << std::endl;

  return 0;
}

我期望*piaia中的第二个数组,因此输出为4567。

但是输出是4814197056,所以我显然做错了。如何正确访问行中的元素?

最佳答案

就目前而言,您将不得不写

std::cout << (*pia)[0] ...

因为[]的绑定(bind)比*更牢固。但是,我认为您真正想做的是
int *pia = ia[1];
std::cout << pia[0]
          << pia[1]
          << pia[2]
          << pia[3]
          << std::endl;

附录:顺便说一下,获得输出的原因是*pia[i]是另一种编写pia[i][0]的方式。因为pia[0]ia[1]pia[1]ia[2],并且pia[2]及更高版本是垃圾(因为ia太短了),所以您先打印ia[1][0]ia[2][0]然后再垃圾两次。

10-08 11:51