其他分享
首页 > 其他分享> > 使用C中的指针访问多维数组元素

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

作者:互联网

我试图用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,所以我显然做错了.如何正确访问行中的元素?

解决方法:

就目前而言,你必须写

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]然后垃圾两次.

标签:dereference,c,multidimensional-array,pointers
来源: https://codeday.me/bug/20190824/1712686.html