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

本文详细介绍了在C语言中如何通过数组名和指针处理数组的四种不同方法,包括数组名作为函数参数、指针作为函数参数等,并提供了完整的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 


 
  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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值