C 值引數和引用引數

2022-05-01 12:57:08 字數 3573 閱讀 2956

未用ref或out修飾符宣告的引數為值引數。

使用值引數,通過將實參的值複製到形參的方式,把資料傳遞到方法。方法被呼叫時,系統做如下操作。

值引數的實參不一定是變數。它可以是任何能計算成相應資料型別的表示式。

看乙個例子:

float func1(float val)    //宣告方法

下面來呼叫方法

float fvalue1=func1(k);        //實參是float型別的變數

float fvalue2=func1((k+j)/3); //實參可以計算成float表示式

在把變數作用於實參之前,變數必須賦值(除非是out引數)。對於引用型別,變數可以被設定為乙個實際的引用或null。

下面的**展示了乙個名為mymethod的方法,它有兩個引數,乙個是myclass型變數和乙個int。

1

class

myclass25

class

program

6, f2:

", f1.val, f2);13}

14static

void main(string

args)

15, f2:

", a1.val, a2);22}

23 }

我們用圖來表示實參和形參在方法執行的不同階段的值。

使用引用引數時,必須在方法的申明和呼叫中都使用關鍵字ref修飾符。

實參必須是變數,在用作實參前必須被賦值。如果是引用型別的變數,可以賦值為乙個引用或者null值。

下面的**闡明了引用引數的宣告和呼叫的語法:

void mymethod(ref

int val) //

方法宣告包含ref修飾符

int y = 1

; mymethod(

ref y); //

方法呼叫

mymethod(

ref3+5); //

錯誤,形參必須是變數

在第一小節的內容中我們知道,對於值引數,系統在棧上為形參分配記憶體,相反對於引用引數:

由於形參名和實參名的行為,就好象指向相同的記憶體位置,所以在方法的執行過程中,對形參作的任何改變,在方法完成後依然有效(表現在實參變數上)。

在方法的宣告和呼叫上都使用關鍵字ref.

下面的**再次展示了方法mymethod,但這一次引數是引用引數而不是值引數。

1

class

myclass25

class

program

6, f2:

", f1.val, f2);13}

14static

void main(string

args)

15, f2:

", a1.val, a2);

2223

}24 }

同樣,還是用圖來闡明方法執行的不同階段實參和形參的值。

對於乙個引用型別物件,不管是將其作為值引數傳遞還是作為引用引數傳遞,我們都可以在方法成員內部修改它的成員。不過,我們並沒有在方法內部設定形參本身。

下面我們就來看看在方法內部設定形參本身時會發生什麼。

1

class

myclass25

class

program6"

, f1.val);

12 f1 = new

myclass();

13 console.writeline("

after new object creation:

", f1.val);14}

15static

void main(string

args)16"

, a1.val);

20refasparameter(a1);

21 console.writeline("

after method call:

", a1.val);22}

23 }

這段**的輸出如下:

before method  call:       20

after member assignment:

50after

newobject creation: 20

after method call:

50

同樣,還是用圖來闡明以下幾點。

除了在方法宣告和方法呼叫時使用ref關鍵字之外,與上面的**完全一樣。

1

class

myclass25

class

program6"

, f1.val);

12 f1 = new

myclass();

13 console.writeline("

after new object creation:

", f1.val);14}

15static

void main(string

args)16"

, a1.val);

20 refasparameter(ref

a1);

21 console.writeline("

after method call:

", a1.val);22}

23 }

這段**的輸出如下:

before method  call:       20

after member assignment:

50after

newobject creation: 20

after method call:

20

我們開始說過,引用引數的行為就是將實參作為形參的別名。

這些都是老生常談的問題,為什麼還要寫?

一是因為今天看書看到了與此相關的內容,回去翻了翻書,然後記錄下來

二是供自己以後查閱,畢竟看部落格比翻書來的快。

最後,祝大家週末愉快,玩的開心。

C 值引數 引用引數和輸出引數

一 值引數 在使用引數時,是把乙個值傳遞給函式使用的乙個變數。對函式中此變數的任何修改都不會影響函式呼叫中指定的引數。由於函式只有乙個返回值,不能用作引數的多個變數值 二 引用引數 即函式處理的變數與函式呼叫中使用的變數相同,而不僅僅是值相同的變數。因此,對這個變數的任何改變都會影響用作引數的變數值...

C 方法引數 值引數,引用引數,輸出引數

使用值引數,通過複製實參的值到形參的方式,把資料傳遞到方法,方法被呼叫的時候,系統做如下操作 在棧中為形參分配空間 複製實參到形參。注意 乙個值引數的實參不一定是變數,它可以是任何能夠計算成相應資料型別的表示式。在把變數用作實參之前,變數必須被賦值 除非是輸出引數,這個稍後介紹 對於引用型別,變數可...

形參,實參,值引數,引用引數

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace deledemo class program static...