比如你定义了int
*p,a[10]并且让p=a,
这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的内容。
那么要引用a[i],你可以有很多种写法,比如*(a+i),
*(p+i),
p[i],都是等效的。
p++的含义其实不是p=p+1,至少有时不是,p++的操作其实是让p指向下一个元素,也就是原来p指向的是a[0],那么现在p指向a[1]了。由于a是int类型,站4个字节,那么p++这个操作其实是让p的内容增加了4。不要问为什么,c语言就是这么规定的。如果p指向的是一个char类型,那么p++就使p的值增加1。
int (*pstu)[4] 为指向有4个元素的数组的指针
int* getPosPerson(int pos, int (*pstu)[4]) 为返回值为指针的函数
注意这是指针函数,而不是函数指针,后者为指向函数的指针变量,两者含义是不同的
(类似指针数组和数组指针,两者含义也是不同的,一个本质是数组,一个本质是指针)
调用该函数的语句为:ppos = getPosPerson(pos, scores)
传入的scores表示3行4列的二维数组首行数组的地址,即&scores[0]
调用后相当于int (*pstu)[4]=scores,所以在getPosPerson中pstu与scores是等价的
即pstu可看作&scores[0],那么pstu+pos也就等价于scores+pos,等价于&scores[pos]
即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指针
返回该行指针ppos 后,就可以查看该行表示的学生的4科成绩了