C 學習 函式的ref out引數

2021-06-05 10:23:23 字數 1994 閱讀 2181

函式引數預設是值傳遞的,也就是「複製乙份」,通過函式的處理對數值本身並沒有影響,如果函式想對數值本身產生影響就需要使用相應的引數。

ref必須先初始化,因為是引用,所以必須先「有」,才能引用。使用ref如果未進行初始化,將報出如圖所示的錯誤使用了未賦值的區域性變數「age」:

加上ref之後傳參傳的是引用而不再是沒加ref時的拷貝。

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace refout引數

static void incage(ref int age)}}

out是內部為外部賦值,所以不需要初始化,而且初始化也沒用。

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace refout引數

static void incage(out int age)}}

執行結果:

總結:ref應用場景內部對外部的值進行改變,out則是內部為外部變數賦值,out一般用在函式有多個返回值的場所。

out應用舉例:int.tryparse

int.parse()是一種類容轉換;表示將數字內容的字串轉為int型別。

如果字串為空,則丟擲argumentnullexception異常;

如果字串內容不是數字,則丟擲formatexception異常;

如果字串內容所表示數字超出int型別可表示的範圍,則丟擲overflowexception異常;

int.tryparse 與 int.parse 又較為類似,但它不會產生異常,轉換成功返回 true,轉換失敗返回 false。最後乙個引數為輸出值,如果轉換失敗,輸出值為 0

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace refout引數

",i);

}else

",i);

}console.readkey();}}

}

執行結果:

轉換成功:

轉換失敗:

ref應用舉例:

交換函式swap:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace refout引數

,i2=", i1, i2);

console.readkey();

}static void swap(ref int i1,ref int i2) //注意ref引數}}

如果不使用ref引數,swap處理的將僅僅是i1和i2的拷貝,對值本身沒有影響。所以數值沒有改變。

使用ref引數則將引用傳入函式,而不僅是值得拷貝。

執行結果:

C 學習簡述 ref out 可變引數 遞迴

一 ref out 共同點 兩者都是對基本型別 int bool float double 等 以及string的值進行修改。不同點 ref是對有值引數 有初始化的引數 經行修改,out是對無值引數 沒有經行初始化的引數 修改。二 可變引數params static int sum int nul,...

C 之可變引數,ref,out

1 可變引數 在c 4.0中增加了許多新的特性,這裡我主要說一下 可變引數陣列 int sum params int values int sum string name,params int values 注意 可變引數陣列必須是最後乙個,而且可變引數是c4.0中才有的特性。引數預設值 c 4.0...

c 基礎練習 03 引數中的 ref out

從程式結構上來說,ref和out是把return的工作給搶了。using system namespace ref和out max max m,n,out max console.writeline out最大值為 max maxref m,n,ref max console.writeline r...