C 中的引數傳遞

2021-09-16 12:42:44 字數 2359 閱讀 6522

c#中的引數傳遞,根據引數的型別可以分為四類

在預設情況下,clr方法中引數的傳遞都是按值傳遞

對於引數又分為:

形參:被呼叫方法中的引數,實參:呼叫方法的引數

class

program

// addnum就是形參,也就是被呼叫方法中的引數

private

static

void

add(int addnum)

}

對於值型別的按值傳遞,傳遞的是該值型別例項的乙個拷貝,也就是形參此時接受到的是實參的乙個副本,被呼叫方法操作是實參的乙個拷貝,所以此時並不影響原來呼叫方法中的引數值,為了證明這點,看看下面的**和執行結果就明白了:

class

program

// 1. 值型別按值傳遞情況

private

static

void

add(int addnum)

}

執行結果為:

當傳遞的引數是引用型別的時候,傳遞和操作的是指向物件的引用,此時方法的操作就會改變原來的物件。

class

program

// 2. 引用型別按值傳遞情況

private

static

void

addref

(refclass addnumref)

}class

refclass

執行結果為:

對於string型別同樣是引用型別,然而對於string型別的按值傳遞時,此時引用型別的按值傳遞卻不會修改實參的值

class

program

// 3. string引用型別的按值傳遞的特殊情況

private

static

void

changestr

(string oldstr)

}

執行結果為:

不管是值型別還是引用型別,我們都可以使用ref 或out關鍵字來實現引數的按引用傳遞,然而按引用進行傳遞的時候,需要注意下面兩點:

方法的定義和方法呼叫都必須同時顯式使用ref或out,否則會出現編譯錯誤

clr允許通過out 或ref引數來實現方法過載。如:

#region clr 允許out或ref引數來實現方法過載

private

static

void

add(string str)

// 編譯器會認為下面的方法是另乙個方法,從而實現方法過載

private

static

void

add(ref string str)

#endregion

class

program

#region 按引用傳遞

// 1. 值型別的按引用傳遞情況

private

static

void

changebyvalue

(ref int numvalue)

// 2. 引用型別的按引用傳遞情況

private

static

void

changebyref

(ref string numref)

#endregion

}

執行結果為:

C 中的引數傳遞

傳值方式 include void swap float m,float n 以上 將實參的值傳送形參,當被呼叫函式執行完畢時,m和n從記憶體中釋放。a和b的值沒有發生任何變化。即形參發生變化不影響實參。傳位址方式 形參變化影響實參 include void swap float m,float n...

C 函式中引數的傳遞

2 34 include stdafx.h 5 include 6 7using namespace std 89 值傳遞 10void swap1 int p,int q 11 1718 指標傳遞,函式體內只有指標值的變化 19void swap2 int p,int q 2026 27 指標傳遞...

C 中陣列引數傳遞

include 傳遞陣列引數的幾種方式 void printvalues const int a 10 void printvalues2 int a 10 控制邊界 方法1 void printvalues4 int start,int end void printvalues5 const in...