c++ - 在 C++ 中使用指针访问多维数组元素

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

最佳答案

就目前而言,你必须写

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

关于c++ - 在 C++ 中使用指针访问多维数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27186494/

相关文章:

c++ - 返回指向列表中对象的指针

python - 在 python gdb 脚本中索引 c++ vector

c++ - 如果我可以将普通指针指向类中的变量,那么类成员指针有什么意义呢?

pointers - 将指针的值存储在 Rust 中的另一个指针中

java - 在 2D 数组中创建 "Pixel"类型形状

arrays - 将数组插入数组 perl

c++ - 如何在 x86 程序集中递增数组?

c++ - 如何声明接受转发引用并返回引用或拷贝的函数模板

c 使用结构指针数组写入和读取文件

c++ - 初始化一个固定的 C 数组成员结构