定义:
形参:(形式参数)
在函数定义中出现的参数可以看成是一个占位符,他没有数据,函数被调用的时候,接受传递进来的数据,称位形式参数,简称形参。
eg: int sum(int m,int n)
这里,int m,int n,是形参,但是此时可以看作是一个占位置的,等到接收数据后才会被赋值。形参只有被调用的时候才会有值。
实参:(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,称为实际参数,简称实参。
eg: sum(began,end);
这里,began与end应是两个被赋值的变量。作为实参把值传递给形参,在下面函数中变量began值传递给m.
注意:形参和实参的功能是用来传递数据,发生调用函数时,实参的值传递给形参。
#include <stdio.h>
int sum (int m,int n)
{
printf("1.0: m=%d n=%d\n",m,n);//输出为1.0:m=5,n=3.
m+=n;
printf("2.0 m=%d n=%d\n",m,n);//输出为2.0:m=8,n=3.
}
int main ()
{
int began =5;
int end = 3;
sum (began ,end );
printf("主函数:began=%d end=%d\n",began,end);//输出为:主函数:began=5 end =3.
return 0;
}
形参与实参的区别与联系
1),形参变量只有在被调用的时候才会分配内存,调用结束的时,立即释放,所以哦形参变量只有在函数内部有效,不能在函数外部使用,所以函数在内部改变它的值,只对当前函数内部有用。
m+=n;
printf("2.0 m=%d n=%d\n",m,n);//输出为2.0:m=8,n=3。
在sum函数中的这行代码改变了变量m的值,在函数后续运行中m值是改变了,但是当函数运行结束后,m会被释放,主函数中的值并不会改变。(把主函数中变量began名称改为m,会更好对比,但是我懒得改了)。
2)实参可以是常量,变量,表达式,函数等。无论是什么类型,在函数调用的时候,他都必须有确定的值,以便把这些值传给形参。(传递函数的形式比较有意思,感兴趣可以了解一下)。
3).实参和形参在数量上,类型上,顺序上,必须严格一致,当然,如果能够进行强制类型转换或者自动类型转换,那么实参类型也可以不同于形参。
4).函数调用中参与的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向传递给实参。所以形参的值不会影响实参的值。