用指针来遍历一个二维数,代码如下:
- int a[3][3]={5,2,2,9,5,6,2,1,9};
- for (int i=0; i<3; i++) {
- for (int j=0; j<3; j++) {
- printf("%d ",*(*(p+i)+j));
- }
- }
复制代码
其实很简单,两个for循环,用指针分别取元素就行了,但是迷惑到了一个地方,就是*(p+i),一直以为*(p+i)取出的是每行的首个元素,但是不是这样的,*(p+i)其实取得是每行的地址,因为a[0],a[1]等表示的是这行的内存地址,迷惑就在这里了。。。 所以最后取每个元素就是在*(p+i)基础上再进行指针的偏移,即*(*(p+i)+j)。
刚学C语言,在指针、指针数组、指针与二维数组这里比较容易迷惑,多多总结!希望能帮助在这里迷惑的人。 |
|