【问题标题】:Pointers and multidimensional arrays in C++C++中的指针和多维数组
【发布时间】:2018-01-06 21:21:32
【问题描述】:

我有这段代码:

#include <iostream>
int main()
{
int ia[3][4]; // array of size 3; each element is an array of ints of size 4
int (*p)[4] = ia; // p points to an array of four ints
p = &ia[2]; // p now points to the last element in ia
return 0;
}

p 如何指向ia 中的最后一个元素?

【问题讨论】:

  • 您在寻找什么样的“方式”?
  • 我认为它会指向第三行的第一个元素。为什么我对 ia 的 initiaziler 没有任何附加维度,但它指向最后一行中的最后一个元素,而不是第一个?
  • 它不指向最后一行的最后一个元素。 ia 的最后一个元素是第三行本身。
  • ia 的元素是指向 int[4] 数组的指针。 ia 有 3 个元素。最后一个是 ia[2]。所以你的元素不是一个数字,它是一个数组。
  • 哦,好吧,所以“最后一个元素”并不是指 ia[2][3],而是第三行。非常感谢!

标签: c++ c++11 pointers multidimensional-array


【解决方案1】:

p 如何指向ia 中的最后一个元素?

ia 包含 3 个元素。每个元素是一个由 4 个整数组成的数组。 ia[2] 是最后一个元素,即最后一个由 4 个整数组成的数组。

【讨论】:

    【解决方案2】:

    int (*p)[4] = ia; // p 指向一个由四个组成的数组

    p = &ia[2]; //p 现在指向 ia 中的最后一个元素

    如果你有数组

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

    那么在int (*p)[4] = ia;之后,指针p将指向{1,2,3,4},在p = &amp;ia[2];之后,p将指向{ 9,10,11,20 }

    如果你想要一个指向最后一个数组的第一个元素的指针,从你的例子中:

    int ia[3][4] = { { 1,2,3,4 },{ 5,6,7,8 },{ 9,10,11,20 } };
    int(*p)[4] = ia; // p points to { 1,2,3,4 }
    p = &ia[2]; // p points to { 9,10,11,20 }
    std::cout << *(p[0]) << std::endl; // 9, because p[0] points to the first int of { 9,10,11,20 }
    std::cout << *(p[0]+3) << std::endl; // 20, because p[0]+3 points to the last int of { 9,10,11,20 }
    

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多