上一章我们已经了解了指针的灵活性,对于一个指针游标(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));
}
输出为:
000000000061FDF0
000000000061FDFC
1 4
1 2
4 5