指针作为函数参数(处理数组的四种方式)
注:红色是自己的理解,可能不一定对,请指正!
-
//数组名传递给指针子参数
-
#include <stdio.h>
-
#define N 3
-
float average(float * g);
-
int main()
-
{
-
float grade[N]={60,75,80};
-
printf("学生的平均成绩是:%.3f\n",average(grade));//这里还是传递的是首元素的首地址
-
}
-
float average(float * g)
-
{
-
float *a=g; //这句话很重要,这里的作用是再定义一个指针作为地址用,将来限制指针g的循环次数,
-
float ave,sum=0;
-
for(;g<a+N;g++) //原来a的地方用g代替会出错:因为随g自增,条件恒满足,程序陷入死循环
-
//上面的意思是不能写成:for(;a<g+N;g++),每次g++完后,都会满足条件a<g+N,
-
//所以,上面说会进行for的死循环。a+N意思是a+N的值是最后一个数组元素的下一个
-
//地址,g<a+N就是g的取值是要取完数组全部元素个数N。
-
//要用指针取整个数组元素的值(记得要加*),就要用指针循环,如何限制指针的次数,
-
//就要找一个值,这个值就是地址,也就是找一个指针变量(是数组元素的地址不是元素的值),
-
//于是程序中才出现了另一个定义指针的语句:float *a,先将这个指针a的值等于指针g后,
-
//然后再使用a+N的表达式的值来限定实际调用元素指针g的范围。
-
sum+=*g;
-
return ave=sum/N;
-
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
-
//数组名传递给数组名
-
#include <stdio.h>
-
#define N 3
-
float average(float grade[N]);
-
int main()
-
{
-
float grade[N]={60,75,80};
-
printf("学生的平均成绩是:%.3f\n",average(grade));
-
}
-
float average(float grade[N])
-
{
-
int i; //
-
float ave,sum=0;
-
for(i=0;i<N;i++) //
-
sum+=grade[i];
-
return ave=sum/N;
-
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
-
//指针传递给数组名
-
#include <stdio.h>
-
#define N 3
-
float average(float grade[N]);
-
int main()
-
{
-
float grade[N]={60,75,80};
-
float * a=grade;
-
printf("学生的平均成绩是:%.3f\n",average(a));
-
}
-
float average(float grade[N])
-
{
-
int i; //
-
float ave,sum=0;
-
for(i=0;i<N;i++) //
-
sum+=grade[i];
-
return ave=sum/N;
-
}
-------------------------------------------------------------------------------------------------------------------------------------------------------
-
//指针传递给指针子参数
-
#include <stdio.h>
-
#define N 3
-
float average(float * g);
-
int main()
-
{
-
float grade[N]={60,75,80};
-
float * a=grade;
-
printf("学生的平均成绩是:%.3f\n",average(a));
-
}
-
float average(float * g)
-
{
-
float *a=g; //
-
float ave,sum=0;
-
for(;g<a+N;g++) //
-
sum+=*g;
-
return ave=sum/N;
-
}
//指针传递给指针子参数
#include <stdio.h>
#define N 3
float average(float * g);
int main()
{
float grade[N]={60,75,80};
float * a=grade;
printf("学生的平均成绩是:%.3f\n",average(a));
}
float average(float * g)
{
float *a=g; //这句话很重要
float ave,sum=0;
for(;g<a+N;g++) //原来a的地方用g代替会出错:因为随g自增,条件恒满足,程序陷入死循环
sum+=*g;
return ave=sum/N;