形式引數和實在引數

2022-09-02 23:30:27 字數 2546 閱讀 9193

形式引數:值形式引數、變數形式引數。函式或過程定義時的引數為形式引數。

實在引數:函式或過程呼叫時的引數為實在引數。

1、值形式引數

值形參的作用:值形參從與它位置對應的實參中接受資料並把資料傳送到所在的過程或函式中。

當過程或函式被呼叫時,系統為每個值形參開闢臨時的儲存單元,並按從左到右的順序,把實在引數的值一一賦給對應位置上的形式引數。

應該強調的是:

①形參表中只能使用型別識別符號,而不能使用型別。

②值形參和對應的實參必須一一對應,包括個數和型別。

③實參和值形參之間資料傳遞是單向的,只能由實參傳送給形參,相當賦值運算。

④乙個特殊情況是,當值形參是實型變數名時,對應的實參可以是整型表示式。

⑤值形參作為子程式的區域性量,當控制(執行到)返回程式後,值形參的儲存單元釋放。

2、變數形式引數

必須在形參名的前面加上 var 。

變數形參的作用:變數形參可以將子程式呼叫過程中產生的值返**用它的程式,這時會有兩種可能:

⑴實參已有確定值,變數形參從對應實參中接收資料,把經過子程式的處理後的值返回主程式,從而改變實參的值。

⑵在呼叫過程或函式前,實參沒有確定的值,與它對應的變數形參可以把在過程或函式執行過程中所得的值傳回,使這個實參得到確定的值。

當過程或函式被呼叫時,系統並不為變數形參另闢儲存單元,而是讓它們和對應的實參共用儲存單元。

應該注意的是:

①與變數形參對應的實參只能是變數名,而不能是表示式。

②與變數形參對應的實參可以根據需要決定是否事先有值。

③變數形參與對應的實參的型別必須完全相同。

④對變數形參,執行時不另外開闢儲存單元,而是與對應的實參使用相同的儲存單元。也就是說,呼叫子程式時,是將實參的位址傳送給對應的變數形參。

⑤當控制返回到呼叫程式後,變數形參的儲存單元不釋放,但變數形參本身無定義,即不得再使用。

選用形式參時,到底是使用值形參還是變數形參,應慎重考慮。值形參需要另開闢儲存空間,而變數形參會帶來一些***。一般在函式中使用值形參,而在過程中才使用變數形參,但也有例外。 

3、值形引數和變數形式引數的區別

⑴在過程或函式呼叫時,值形引數所對應的實參必須有確定的值;而變數形參所對應的實參的值是否確定並不會影響呼叫的進行。

⑵在過程或函式被呼叫後,值形引數所對應的實參的值保持不變;而變數形參所對應的實參的值會發生改變。

4、例子

例1寫出下列兩個程式的執行結果。

program ex1;            program ex2;

var a,b:integer;          var a,b:integer;

procedure swap(x,y:integer);    procedure swap(var x,y:integer) ;

var t:integer;           var t:integer;

begin               begin

t:=x;x:=y;y:=t;           t:=x;x:=y;y:=t;

end;                end;

begin               begin

a:=1;b:=2;               a:=1;b:=2;

writeln(a:3,b:3);          writeln(a:3,b:3);

swap(a,b);             swap(a,b);

writeln(a:3,b:3);          writeln(a:3,b:3);

end.                end.

分析:這兩個程式唯一的區別是ex1中將x,y作為值形參,而 ex2中將x,y作為變數形參,因此在ex2中對x,y的修改實際上是對呼叫該過程時與它們對應的變數a,b的修改,故最後,a,b的值為2,1。而ex1中呼叫swap過程時,只是將a,b的值傳遞給x,y,之後在過程中的操作與a,b無關。

答:ex1的執行結果為:              ex2的執行結果為:

1 2                    1 2

1 2                    2 1

例2寫出下列程式的執行結果。

program ffd;

var x,y,z,t:integer;

procedure p(a,b:integer;var c,d:integer);

begin  

a:=a+1; 

b:=b+1; 

c:=c+1; 

d:=d+1;

writeln(a:5,b:5,c:5,d:5);

end;

begin 

x:=1;  

y:=2;  

z:=3;  

t:=4;

p(x,y,z,t);

writeln(x:8,y:8);

writeln(z:8,t:8);

writeln

end.

答:程式的執行結果為:  

2    3    4    5

1       2

4       5

形式引數和實際引數的區別

形參 全稱為 形式引數 是在定義函式名和函式體的時候使用的引數,目的是用來接收呼叫該函式時傳遞的引數。實參 可以是常量 變數 表示式 函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使實參獲得確定值。實參和形參的區別 空白...

形式引數的問題

形式引數的問題 基本型別 形式引數的改變不影響實際引數 引用型別 形式引數的改變直接影響實際引數 形式引數是基本型別 class demo 形式引數是引用型別 class student class studentdemo class argstest 形式引數 基本型別 太簡單,不是我今天要講解的...

形式引數的問題

類 要的是該類的物件 抽象類 要的是該抽象類的子類物件 介面 要的是該介面的子實現類的物件 類 該類的物件 class student class studentdemo 測試類 public class studenttest 抽象類 該抽象類的子類物件 abstract class teache...