我试图用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,所以我显然做错了。如何正确访问行中的元素?
答案 0 :(得分:5)
目前,你必须写
std::cout << (*pia)[0] ...
因为[]
比*
绑定得更强。但是,我认为你真正想做的是
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]
然后再打垃圾两次。
答案 1 :(得分:1)
我使用以下方式进行打印,效果很好。
std::cout << (*pia)[0]
<< (*pia)[1]
<< (*pia)[2]
<< (*pia)[3]
<< std::endl;
在C ++的优先表中,[]的优先级高于*。
答案 2 :(得分:0)
int *pia[] = { &ia[1][0], &ia[1][1], &ia[1][2], &ia[1][3] };
或
int* pia = static_cast<int*>(&ia[1][0]);
std::cout << pia[0] << " "
<< pia[1] << " "
<< pia[2] << " "
<< pia[3] << " "
<< std::endl;