C语言数组指针?

Python018

C语言数组指针?,第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科成绩了

数组名并不是一个普通的变量,而是一个指向数组首元素的指针。也就是说,我们可以用数组名来初始化一个对应类型的指针。虽然数组名是指针,但它是一个指针常量。也就是说,不带下标的数组名不能作为左值。指针是一种数据类型,所以,我们可以用指针类型来创建一个数组。声明一个指针数组的语句格式是:

指针类型 * 数组名[常量表达式];

对指针数组的操作和对指针变量的操作并无不同.

int (*p2)[5] = &temp这是一个指针数组;第一个元素存储的是数组temp的首地址;

*p2等价于&temp; **p2等价于temp数组的第一个元素的值1;

*(*p2+i)等价于*(&temp+i),等价于temp[i]