使用C ++中的指针访问多维数组元素

时间:2014-11-28 10:20:19

标签: c++ pointers multidimensional-array dereference

我试图用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;
}

我希望*pia成为ia中的第二个数组,因此输出为4567。

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

3 个答案:

答案 0 :(得分:5)

目前,你必须写

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

因为[]*绑定得更强。但是,我认为你真正想做的是

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]然后再打垃圾两次。

答案 1 :(得分:1)

我使用以下方式进行打印,效果很好。

std::cout << (*pia)[0]
         << (*pia)[1]
         << (*pia)[2]
         << (*pia)[3] 
         << std::endl;

在C ++的优先表中,[]的优先级高于*。

答案 2 :(得分:0)

  int *pia[] = { &ia[1][0], &ia[1][1], &ia[1][2], &ia[1][3] };

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