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 = &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++中的指针和多维数组的主要内容,如果未能解决你的问题,请参考以下文章