c语言指针指向数组的问题。

Python013

c语言指针指向数组的问题。,第1张

首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。

比如你定义了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科成绩了