使用C中的指针访问多维数组元素
作者:互联网
我试图用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] ...
因为[]比*更强烈地结合.但是,我认为你真正想做的是
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]然后垃圾两次.
标签:dereference,c,multidimensional-array,pointers 来源: https://codeday.me/bug/20190824/1712686.html