形参和实参的特点
1、形参变量只有在被调用时才分配
内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在
函数内部有效。
函数调用结束返回主调用函数后则不能再使用该形参变量。
2、
实参可以是常量、变量、
表达式、
函数等,无论实参是何种类型的量,在进行
函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、
实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生
类型不匹配的错误。
4、在一般
传值调用的机制中只能把
实参传送给形参,而不能把形参的值反向地传送给实参。因此在
函数调用过程中,形参值发生改变,而
实参中的值不会变化。而在
引用调用的机制当中是将
实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
形参和实参的对照实例(C语言版)
int main()
{
int n;
printf("input number\n");
scanf("%d",&n);
s(n);
printf("n=%d\n",n);
}
int s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);
}
本程序中定义了一个
函数s,该函数的功能是求∑ni 的值。在
主函数中输入n 值,并作为
实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的
标识符都为n,但这是两个不同的量,各自的
作用域不同)。在
主函数中用printf 语句输出一次n 值,这个n 值是
实参n 的值。在
函数s 中也用printf 语句输出了一次n 值,这个n 值是形参最后取得的n 值。从运行情况看,输入n 值为100。即
实参n 的值为100。把此值传给
函数s 时,形参n 的初值也为100,在执行函数过程中,形参n的值变为5050。返回
主函数之后,输出
实参n 的值仍为100。可见
实参的
传值调用值不随形参的变化而变化。
形参改变实参的实例(C#语言版)
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classBaseTest
{
///<summary>
///形参改变实参的值
///</summary>
///<paramname="strParameter">形参</param>
///<author>youngto</author>
public void TestChange(refstringstrParameter)
{
strParameter="changevalue";
Console.WriteLine(strParameter);
}
}
classProgram
{
staticvoidMain(string[]args)
{
stringstrArgument="defaultvalue";
Console.WriteLine(strArgumentt);//这里实参的值没改变。
BaseTestsm=newBaseTest();
sm.TestChange(refstrArgumentt);
Console.WriteLine(strArgumentt);//这里实参的值改变。
}
}
}
输出的值为:
default value
change value
change value
在上面的"Main()”主 程序当中演示了实参"strArgument"的值在形参的
作用域当中因形参"strParameter"的改变而改变了。