上一章我们已经了解了指针的灵活性,对于一个指针游标(unsigned char *)可以指向内存的任意一个字节,但是对于取值实际而言,我们需要进行不同步长的取值。
二维数组
有如下矩阵作为二维数组:
int arr[2][3] = {{1,2,3},{4,5,6}};
现在我们需要一个指针来每次指向一行,指针每次加一,便指向下一行。
此时我们需要组指针。
int (*p)[3];p = arr;
但需要注意的是组指针是有两层指针构成的。
因此需要使用两次解指针来访问元素。要想访问列中的各个元素,需要额外的访问指针。
#include <stdio.h>#include <stdlib.h>int main(){int arr[2][3] = {{1,2,3},{4,5,6}};int (*p)[3];p = arr;int *r = p[0];printf("%p\n%p\n",p,p+1);printf("%d %d\n",**p,**(p+1));printf("%d %d\n",*r,*(r+1));r = p[1];printf("%d %d\n",*r,*(r+1));}
输出为:
000000000061FDF0000000000061FDFC1 41 24 5
