C++中的指针和多维数组

Posted

技术标签:

【中文标题】C++中的指针和多维数组【英文标题】:Pointers and multidimensional arrays in 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],而是第三行。非常感谢! 【参考方案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 

【讨论】:

以上是关于C++中的指针和多维数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将零填充的多维数组传递给 C++ 中的函数?

如何在 C++ 中正确使用动态分配的多维数组 [重复]

C多维数组中的指针地址

多维数组与指针

如何序列化谷物上的多维数组,C++ 序列化库

动态大小的多维数组的 C++ 解决方法