什么是函数参数,如何传递函数参数
函数分有参数函数和⽆参数函数,函数参数当然只有参数的函数。函数参数就是我们写函数名称后圆括号内的常量值、变量、表达式或函数。当我们定义函数时,这是的参数有称为形式参数,形式参数不能是常量值。当我们引⽤或调⽤该函数时,这是的参数有称为实际参数(实参)。形式参数的类型说明可在函数体{}与紧跟在函数名之后的()之间,也可在()之内,⽬前流⾏的风格应是在括号内。这是⼀种风格问题,可以依照个⼈习惯。
在函数调⽤时,⼤多数的情况下,主函数和被调⽤的函数之间有数据传递关系,在传递数据时情况较复杂,但记住⼀点就是参数类型必须匹配,数量⼀般也相等(除在某些库函数⽤省时后续参数),集中较复杂的情况说明如下:
1,强制类型转换。这些类型转换必须是c语⾔中可进⾏的。如形参说明为int,⽽实参为float型,那么在实际处理时按float型处理。
2,数据类型转换。包括字符串,在调⽤函数时传递实参变量数组的⽬前地址,或字符串的⾸指针。
3,在以函数或表达式做参数时,实参形式的表达式或函数必须有确定的与形参类型匹配的值,
另外还应注意,c中规定,时参变量对形参变量的数据传递都是在局部的情况下单向传递的,只能是参传
递给形参,⽽不能把形参传递给实参,但是如果实参变量和形参变量都是全局变量时就不同了,这时形参的改变会影响实参的改变,这在某些场合中是⼀种⾮常有⽤的⽅法。⽐如我们编写两个矩阵相乘的函数,两个实参形式的矩阵相乘函数调⽤⼀个函数时,相乘的结果(两矩阵相乘)要返回到调⽤函数,这是⽤全局变量就是⼀种折中的⽅法,但最好的⽅法还是采⽤函数参数直接返回的⽅法,下⾯是⽤全局变量的⽅法实现的数组之间的乘法,⽤来说明参数的传递。
/*****************A=B*C******************/ #include<stdio.h>
#include<conio.h>
#define X 3
#define Y 3
int a[X][Y];
int b[X][Y];
int c[X][Y];
void matrix(int b[][X],int c[][Y]);
main()
{
int i,j,temp;
clrscr();
printf("lease input int matrix b[%d][%d]"n",X,Y);
for(i=0;i<Y;i++) /*输⼊要进⾏运算的数组*/ for(j=0;j<Y;j++){
scanf("%d",&temp);
b[j]=temp;
}
printf("lease input int matrix c[%d][%d]"n",X,Y);
for(i=0;i<X;i++) /*输⼊要进⾏运算的数组*/ for(j=0;j<Y;j++){
scanf("%d",&temp);
c[j]=temp;
}
matrix(b,c);
printf("Now print resource matrix b[%d][%d]=",X,Y);
for(i=0;i<X;i++){
printf(""n" ;
for(j=0;j<Y;j++)
printf("%d ",b[j]);
}
printf(""n" ;
printf("Now print resource matrix c[%d][%d]=",X,Y);
for(i=0;i<X;i++){
printf(""n" ;
for(j=0;j<Y;j++)
printf("%d ",c[j]);
} /*完成对输⼊的相应,即把输⼊的数组打出来*/ printf(""n":lol ;
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
for(i=0;i<X;i++){
printf(""n":lol ;
for(j=0;j<Y;j++)
printf("%d ",a[j]);
}/*打出结果*/ getch();
return 0;
}
/**********************计算数组乘法的⼦函数************************/ void matrix(int b[][X],int c[][Y])
{
int i,j,k,temp;
for(i=0;i<X;i++)
for(j=0;j<Y;j++){
for(k=0;k<Y;k++)
a[j]+=b[k]*c[k][j];
}
parameter数据类型
}
⼤家可看出,函数参数像数学中的函数⼀样,在数学中,y=f(x)是基本的函数表达形式,x可看作是参数,y可看作是返回值;z=f(x,y)事⼆元函数,有两个参数,在C语⾔中对应于两个参数的函数。这样⼤家或许明⽩了什么时函数及函数参数了吧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。