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