指针作为函数参数(处理数组的四种方式)

指针作为函数参数(处理数组的四种方式)

注:红色是自己的理解,可能不一定对,请指正!

 
  1. //数组名传递给指针子参数

  2. #include <stdio.h>

  3. #define N 3

  4. float average(float * g);

  5. int main()

  6. {

  7. float grade[N]={60,75,80};

  8. printf("学生的平均成绩是:%.3f\n",average(grade));//这里还是传递的是首元素的首地址

  9.  
  10. }

  11. float average(float * g)

  12. {

  13. float *a=g; //这句话很重要,这里的作用是再定义一个指针作为地址用,将来限制指针g的循环次数,

  14. float ave,sum=0;

  15. for(;g<a+N;g++) //原来a的地方用g代替会出错:因为随g自增,条件恒满足,程序陷入死循环

  16.                 //上面的意思是不能写成:for(;a<g+N;g++),每次g++完后,都会满足条件a<g+N,

  17.                 //所以,上面说会进行for的死循环。a+N意思是a+N的值是最后一个数组元素的下一个

  18.                 //地址,g<a+N就是g的取值是要取完数组全部元素个数N。

  19.                 //要用指针取整个数组元素的值(记得要加*),就要用指针循环,如何限制指针的次数,

  20.                 //就要找一个值,这个值就是地址,也就是找一个指针变量(是数组元素的地址不是元素的值),

  21.                //于是程序中才出现了另一个定义指针的语句:float *a,先将这个指针a的值等于指针g后,

  22.               //然后再使用a+N的表达式的值来限定实际调用元素指针g的范围。

  23. sum+=*g;

  24. return ave=sum/N;

  25.  
  26. }

-------------------------------------------------------------------------------------------------------------------------------------------------------

 
  1. //数组名传递给数组名

  2. #include <stdio.h>

  3. #define N 3

  4. float average(float grade[N]);

  5. int main()

  6. {

  7. float grade[N]={60,75,80};

  8. printf("学生的平均成绩是:%.3f\n",average(grade));

  9.  
  10. }

  11. float average(float grade[N])

  12. {

  13. int i; //

  14. float ave,sum=0;

  15. for(i=0;i<N;i++) //

  16. sum+=grade[i];

  17. return ave=sum/N;

  18.  
  19. }

-------------------------------------------------------------------------------------------------------------------------------------------------------

 
  1. //指针传递给数组名

  2. #include <stdio.h>

  3. #define N 3

  4. float average(float grade[N]);

  5. int main()

  6. {

  7. float grade[N]={60,75,80};

  8. float * a=grade;

  9. printf("学生的平均成绩是:%.3f\n",average(a));

  10.  
  11. }

  12. float average(float grade[N])

  13. {

  14. int i; //

  15. float ave,sum=0;

  16. for(i=0;i<N;i++) //

  17. sum+=grade[i];

  18. return ave=sum/N;

  19.  
  20. }


-------------------------------------------------------------------------------------------------------------------------------------------------------

 
  1. //指针传递给指针子参数

  2. #include <stdio.h>

  3. #define N 3

  4. float average(float * g);

  5. int main()

  6. {

  7. float grade[N]={60,75,80};

  8. float * a=grade;

  9. printf("学生的平均成绩是:%.3f\n",average(a));

  10.  
  11. }

  12. float average(float * g)

  13. {

  14. float *a=g; //

  15. float ave,sum=0;

  16. for(;g<a+N;g++) //

  17. sum+=*g;

  18. return ave=sum/N;

  19.  
  20. }


//指针传递给指针子参数  
#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;

猜你喜欢

转载自blog.csdn.net/weixin_41632560/article/details/81431019