C 中out引數 ref引數與值引數的用法及區別

2022-02-15 03:22:47 字數 3488 閱讀 6347

這篇文章主要給大家介紹了關於c#中out引數、ref引數與值引數的用法及區別的相關資料,

文中通過示例**介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,

需要的朋友們下面隨著小編來一起學習學習吧

前言

c#方法中引數型別

有4種引數型別,有時候很難記住它們的不同特徵,下圖對它們做乙個總結

值引數

在使用引數時,把乙個值傳遞給函式使用的乙個變數。

在函式中對此變數的任何修改都不影響函式呼叫中指定的引數

如下面的函式,是使函式是使傳遞過來的引數值加倍,並顯示出來:

staticvoidshowdouble(intnum)

", num);

}

引數num在函式中被加倍,如果按以下方式呼叫它:

intnum = 5;

console.writeline("num=", num);

showdouble(num);

console.writeline("num=", num);

輸出到控制台的文字如下所示:

把num作為引數,呼叫showdouble()並不影響mian()中num的值,即使把num值加倍之後再賦值給num,在函式呼叫完之後num的值還是不會變。

這也沒什麼問題。

但是如果我們想改變num的值呢?我們會想到使用為num返回新值的函式:

staticintdoublenum(intnum)

然後呼叫:

intnum = 5;

console.writeline("num=", num);

num = doublenum(num);

console.writeline("num=", num);

ref引數

intnum = 5;

console.writeline("num=", num);

showdouble(refnum);

console.writeline("num=", num);

執行控制台結果如下:

用作ref的引數的變數有兩個限制:

1.函式可能會改變引用引數的值,所以必須在函式呼叫中使用「非常量」變數,所以下面的**是不被允許的:

constintnum = 5;

console.writeline("num=", num);

showdouble(refnum);

console.writeline("num=", num);

2.必須使用初始化過的變數。c#不允許假定ref引數在函式呼叫時初始化,下面的**也是不被允許的:

intnum;

console.writeline("num=", num);

showdouble(refnum);

console.writeline("num=", num);

輸出引數(out)

除了ref外,還可以指定out關鍵字,指定所給的引數時乙個輸出引數,out引數和ref引數都在函式定義和函式呼叫中作為引數的修飾符。事實上,它的執行方式與ref引數幾乎完全一樣,因為在函式執行完畢後,該引數的值將返回給函式呼叫中使用的變數。但是,二者存在一些重要區別:

1.把未賦值的變數用作ref引數是非法的,但是未賦值的變數可以用作out引數

2.在函式中使用out引數時,必須將其看成尚未賦值。也就是說呼叫**可以把已賦值的變數用作out引數,但在函式執行時該變數的值會丟失。

如現在有乙個返回陣列中最大值得max()函式,獲取陣列中最大值得元素索引(這裡假設如果有多個最大值,只返回第乙個最大值索引),新增out引數:

?staticintmax(intintarray,outintmaxindex)

}

returnmaxval;

}

呼叫上面的**:

intmyarray = ;

intmaxindex;

console.writeline("the maxium value is ", max(myarray,outmaxindex));

console.writeline("the index of the maxium value is", maxindex + 1);

控制台輸出的結果如下所示:

總結

C 中out引數 ref引數與值引數的用法及區別

這篇文章主要給大家介紹了關於c 中out引數 ref引數與值引數的用法及區別的相關資料,文中通過示例 介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧 前言 c 方法中引數型別 有4種引數型別,有時候很難記住它們的不同特徵,下圖對它們做乙個總結 值...

C 中ref引數及out引數對比

ref 關鍵字和out關鍵字均會導致引數通過引用來傳遞 相同點1 這是兩者的共同點。通過引用傳遞引數,會使方法中對引數所做的任何修改都將反映在該變數中。兩者還有乙個共同點,那就是 若要使用 ref 引數或out引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字或out關鍵字 相同點2 那兩者有...

ref引數和out引數

引數對於每個學習程式設計的人都很清楚,在任何程式中都不可能沒有引數,下面我就說說乙個特殊的引數型別,其實這個也不算什麼特殊引數了,在c 中已經沒有像c中那樣的指標的概念了,但是有的時候有些時候要寫特殊的處理,其實c 中並不是完完全全放棄這個概念的,下面就寫下這類特殊的引數。引用引數ref 當乙個引數...