形參和實參的關係
形參和實參的特點
1、形參 變數只有在被調用時才分配 記憶體單元,在調用結束時,即刻釋放所分配的記憶體單元。因此,形參只在 函式內部有效。 函式調用結束返回主調用函式後則不能再使用該形參變數。
2、 實參可以是 常量、變數、 表達式、函式等,無論實參是何種類型的量,在進行函式調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。
3、實參和形參在數量上,類型上、順序上應嚴格一致,否則就會發生 類型不匹配的錯誤。
4、在一般 傳值調用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函式調用過程中,形參值發生改變,而實參中的值不會變化。而在 引用調用的機制當中是將實參引用的地址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。
形參和實參的對照實例(C語言版)
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#語言版)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class BaseTest
{
///
///
形參
///
public void TestChange(ref string strParameter)
{
strParameter = "change value";
Console.WriteLine(strParameter);
}
}
class Program
{
static void Main(string[] args)
{
string strArgument = "default value";
Console.WriteLine(strArgumentt); // 這裡實參的值沒改變。
BaseTest sm = new BaseTest();
sm.TestChange(ref strArgumentt);
Console.WriteLine(strArgumentt); // 這裡實參的值改變。
}
}
}
輸出的值為:
default value
change value
change value
在上面的"Main()”主 程式當中演示了實參"strArgument"的值在形參的 作用域當中因形參"strParameter"的改變而改變了。