函数的数据传递

一、值传递

在调用函数过程中,系统会把实参的值传递给被调用函数的形参。该值在函数调用期间有效,可以参加该函数中的运算。在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实结合”。实参向形参的数据传递就是“值传递”,且是单向传递,也就是说,经过一系列语句,形参的值也许已经变了,但是实参的值并不会受到影响,即只能实参的值传给形参,但是形参却不能将值传给实参。

1.当数组元素不是实参时

     例:输入两个整数,要求输出其中较大者。

#include<stdio.h>
int main()
{ int max(int x,int y);  //对max函数的声明
 int a,b,c;
 printf("please enter two integer number:");  //提示输入数据
 scanf("%d,%d",&a,&b);  //输入两个整数
 c=max(a,b);  //调用max函数,有两个实参。大数赋给变量c
 printf("max is %d\n",c);  //输出最大数c
 return 0;
}
int max(int x,int y)  //定义max函数,有两个参数
{
  int z;  //定义临时变量z
  z=x>y?x:y;  //把x和y中大者赋给z
  return(z);  //把z作为max函数的值带回main函数
}

1.当数组元素是实参时

     例:输入10个数,要求输出其中最大的元素和该数是第几个数。

#include<stdio.h>
int main()
{int max(int x,int y);  //函数声明
 int a[10],m,n,i;
 printf("enter 10 integer numbers");   //提示输入数据
 for(i=0;i<10;i++)  //输入10个数给a[0]~a[10]
	 scanf("%d",&a[i]);
 printf("\n");
 for(i=1,m=a[0],n=0;i<10;i++)
 {
   if(max(m,a[i])>m)  //若max函数返回的值大于m
   {m=max(m,a[i]);  //max函数返回的值取代m原值
    n=i;   //把此数组元素的序号记下来,放在n中
   }
 }
 printf("The lagest number is %d\nit is the %dth number.\n",m,n+1);
 return 0;
}
int max(int x,int y)  //定义max函数
{
	return(x>y?x:y);
}

一、地址传递

    当数组名作函数参数时,因为数组名是一个地址,所以向形参(数组名或指针变量)传递的是首元素的地址,而不是一个变量,所以这种情况就不是单向的值传递了,而是双向的地址传递。这个时候就相当于给数组起另一个名字,所以如果在子函数中改变数组元素的值,数组元素的值就真的改变了。

例:有一个一维数组score,内放10个学生的成绩,求平均值。

#include<stdio.h>
int main()
{  float average(float array[10]);  //函数声明
	float score[10],aver;
	int i;
	printf("input 10 scores:\n");  //提示输入数据
	for(i=0;i<10;i++)  //输入10个学生的成绩
		scanf("%f",&score[i]);  
	printf("\n");
	aver=average(score);  //调用average函数
	printf("average score is %5.2f\n",aver);  //输出平均值
	return 0;
}
float average(float array[10])   //定义average函数
{
  int i;
  float aver,sum=array[10];
  for(i=0;i<10;i++)
	  sum=sum+array[i];   //累加学生成绩
  aver=sum/10;
  return(aver);
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值