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