C 梳理 引數傳遞

2021-08-08 01:38:06 字數 2415 閱讀 9284

當呼叫帶有引數的方法時,您需要向方法傳遞引數。在 c# 中,有三種向方法傳遞引數的方式:

方式描述

值引數這種方式複製引數的實際值給函式的形式引數,實參和形參使用的是兩個不同記憶體中的值。在這種情況下,當形參的值發生改變時,不會影響實參的值,從而保證了實參資料的安全。

引用引數

這種方式複製引數的記憶體位置的引用給形式引數。這意味著,當形參的值發生改變時,同時也改變實參的值。

輸出引數

這種方式可以返回多個值。

這是引數傳遞的預設方式。在這種方式下,當呼叫乙個方法時,會為每個值引數建立乙個新的儲存位置。

實際引數的值會複製給形參,實參和形參使用的是兩個不同記憶體中的值。所以,當形參的值發生改變時,不會影響實參的值,從而保證了實參資料的安全。下面的例項演示了這個概念:

using system;

static void main(string args)

", a);

console.writeline("在交換之前,b 的值: ", b);

/* 呼叫函式來交換值 */

n.swap(a, b);

console.writeline("在交換之後,a 的值: ", a);

console.writeline("在交換之後,b 的值: ", b);

console.readline();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

在交換之前,a 的值:100

在交換之前,b 的值:200

在交換之後,a 的值:100

在交換之後,b 的值:200

結果表明,即使在函式內改變了值,值也沒有發生任何的變化。

引用引數是乙個對變數的記憶體位置的引用。當按引用傳遞引數時,與值引數不同的是,它不會為這些引數建立乙個新的儲存位置。引用引數表示與提供給方法的實際引數具有相同的記憶體位置。

在 c# 中,使用ref關鍵字宣告引用引數。下面的例項演示了這點:

using system;

static void main(string args)

", a);

console.writeline("在交換之前,b 的值: ", b);

/* 呼叫函式來交換值 */

n.swap(ref a, ref b);

console.writeline("在交換之後,a 的值: ", a);

console.writeline("在交換之後,b 的值: ", b);

console.readline();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

在交換之前,a 的值:100

在交換之前,b 的值:200

在交換之後,a 的值:200

在交換之後,b 的值:100

結果表明,swap 函式內的值改變了,且這個改變可以在 main 函式中反映出來。

return 語句可用於只從函式中返回乙個值。但是,可以使用輸出引數來從函式中返回兩個值。輸出引數會把方法輸出的資料賦給自己,其他方面與引用引數相似。

下面的例項演示了這點:

using system;

static void main(string args)

", a);

/* 呼叫函式來獲取值 */

n.getvalue(out a);

console.writeline("在方法呼叫之後,a 的值: ", a);

console.readline();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

在方法呼叫之前,a 的值: 100

在方法呼叫之後,a 的值: 5

提供給輸出引數的變數不需要賦值。當需要從乙個引數沒有指定初始值的方法中返回值時,輸出引數特別有用。請看下面的例項,來理解這一點:

using system;

static void main(string args)

", a);

console.writeline("在方法呼叫之後,b 的值: ", b);

console.readline();}}

}

當上面的**被編譯和執行時,它會產生下列結果(取決於使用者輸入):

請輸入第乙個值:

7請輸入第二個值:

8在方法呼叫之後,a 的值: 7

在方法呼叫之後,b 的值: 8

c 引數傳遞

引數型別分為int,ref,out三種,預設為int.int型別在字方法中修改了對應變數後,主方法中的值不會發生變化.ref型別在方法中修改了對應變化後,主方法中的值也會發生變化.out主方法中對應的變數不需要初始化.例子 using system using system.collections....

C 引數傳遞

2.指標與引用區別 3.引數為指標的指標或指標的引用 將實參複製乙份給形參,形參為函式的區域性變數,因此函式對形參操作對實參沒有影響。若傳遞物件會產生物件副本,會呼叫拷貝建構函式,操作完後要呼叫析構函式。形參為指向實參位址的指標,其也算一種按值傳遞,只不過是將實參的位址作為引數傳遞給形參,因此函式對...

c 引數傳遞

引數傳遞 形參 parameter 和實參 argument int num int a,int b int num int a,int b 在函式的宣告或者定義裡,由由0個或多個形參組成的列表。intmain 形參的型別決定了形參實參互動的方式,如形參是引用型別,他將繫結到對應的實參上,引用形參是...