以前学C语言的时候,每次看到这个int (*p)[3],就一脸懵逼,这次又恰巧有个同学问了我,我就翻书看了看,找出了答案,写一篇博客记录一下。
首先还是翻出我们谭浩强版本的C语言程序设计,红色方框里面的int (*p)[4],里面说的听清楚,其实就是吧(*p)和[4]分开来理解,p所指的对象是有4个整形元素的数组,即p是指向一维数组的指针,或者说p指向的是二维数组的行,然后(*p)[0]指的是p指向的行的第0列。
下面有个案列来让我们学以致用。
#include <stdio.h>
void f()
{
int a[2][3] = {{4, 9, 6},{2, 5, 7}};
int (*p)[3], *q; //p指 二维数组的行, q指 二维数组的列
int max = a[0][0];
for (p = a; p - a < 2 ; p++) { //p = a意思是p指向a[0],p - a < 2,意思是有两行,计算时会变成0-0,1-0,不会超过二
for (q = *p; q - *p < 3 ; q++) { //*p其实是(*p)[0],即*p指向第0列,这里省略了[0],就像上面p = a,其实是把a[0]赋给p,q - *p < 3意思是三行,意思同上
if (*q > max)
max = *q;
}
}
printf("Max: %d\n", max);
}