作业帮 > 综合 > 作业

C语言指针问题 *score 与score 有什么区别

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 12:38:14
C语言指针问题 *score 与score 有什么区别
#include
main()
{
void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
average(* score,12);
search(score,2);
}
void average(float * p,int n)
{
float * p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p
score是二维数组指针常量.看到指针,你第一反应是想它指向什么.对于score,它指向的是一维数组score[0],而score[0]它也是个一维数组指针常量(同样,你也得马上反应过来score[0]是指向score[0][0]的).所以*score就是score[0]了,所以average(*score,12)就是把score[0][0]的地址和score的元素总个数传给了该函数咯.
再看下search的函数定义:search(float (*p)[4],int n).
float (*p)[4]; //看声明先看变量名,然后由右往左看.如果遇到括号则先看括号里的.所以这声明是说:p是个指针(p的右边是括号,所以先看括号里的.'*'即代表是个指针),这指针指向一个数组(括号看完后就往右看),该数组有4个float型元素.
即p为数组指针(后面两个字说明它是指针,前面两个字说明它指向一个数组.就像我们说美女一样,后面一个字说明它是女人,前面一个字才说明它是美丽的.如果是指针数组则说明它先是个数组,然后它的元素为指针,那么该定义为:float *p[4])
简单点说float (*p)[4]即声明p指向有4个float型元素的数组,而上面我说了,score也是指向一维数组score[0]的,而score[0]正是有4个float型元素的数组.即p和score是同类型的指针(只不过p是指针变量,score是指针常量).
所以search(score,2)中的实参score是可以作为"void search(float (* p)[4],int n)"这函数的形参p的(因为类型一样).它是把数组名和2传给了该函数.(顺便提下,score[n][i]=*(*(score+n)+i),而score和p是同类型的,所以*(*(p+n)+i)即是score[n][i])