我正在尝试使用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]
然后再垃圾两次。