C語言中out和ref的區別是什麼?

時間 2023-05-10 14:35:51

1樓:匿名使用者

還是以例子來說明吧;

1. ref:

int i =0;

有函式fun(ref i)和fun(i)

它們的函式體都是,那麼在執行以下兩段**後:

1)int i = 0; fun(i);

2)int i = 0; fun(ref i);

1)的輸出是1,(2)的輸出是3,2. out:

int i; /注意,這裡只是宣告了變數i,並沒有對其初始化。

有函式fun(ref i)、fun(out i)和fun(i)

它們的函式體都是,那麼在執行以下三段**後:

1)int i = 0; fun(i);

2)int i = 0; fun(ref i);

3)int i = 0; fun(out i);

1)和(2)在編譯的時候都會報錯:錯誤 cs0165: 使用了未賦值的區域性變數「i」

而(3)能正常編譯,而且輸出3

最後總結一下:

ref和out這兩個關鍵字都能夠提供相似的功效,其作用也很像c中的指標變數。稍有不同之處是:

使用ref型引數時,傳入的引數必須先被初始化。而out則不需要,對out而言,就必須在方法中對其完成初始化。

使用ref和out時都必須注意,在方法的引數和執行方法時,都要加ref或out關鍵字。以滿足匹配。

out更適合用在需要return多個返回值的地方,而ref則用在需要被呼叫的方法修改呼叫者的引用的時候。

2樓:小黃愛吃菜

在c語言中,ref相當於c語言的引用引數,實參和形參一起變。out多用於輸出引數,就是在return之前必須給out標示的引數賦值。這就是out和ref的區別。

3樓:糖糖寳寳

out與ref的區別如下:

private void button1_click(object sender, eventargs e)

refpublic void refvalue(ref int refint)

乙個函式可以有多個ref引數。

public void refvalue(ref int refint,ref int rint)

outpublic void outvalue(out int outint, int i)

函式不可以有多個out引數。

public void outvalue(out int outint, out oint,int i)

為什麼要用ref和out?

4樓:網友

1、ref關鍵字:讓引數按照引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中;也等同將值型別的資料使用引用方式傳參。

2、若要使用ref引數,則方法定義和呼叫方法都必須顯式使用ref關鍵字。

3、傳遞到ref引數的引數必須最先初始化。這與 out 不同,out 的引數在傳遞之前不需要顯式初始化。儘管ref和out在執行時的處理方式不同,但它們在編譯時的處理方式是相同的。

因此,如果乙個方法採用ref引數,而另乙個方法採用out 引數,則無法過載這兩個方法。

c# ref與out 區別

5樓:小二哥哥的

ref 需要在函式內定義 out在傳參定義 out必須要初始化。

c#中的out和ref有什麼區別

6樓:匿名使用者

你好:共性:

ref和out都是將引數按引用傳遞。

若要使用 ref和out 引數,方法定義和呼叫方法都必須顯式使用 ref和out 關鍵字。

區別:使用ref 修飾的引數必須先初始化,而使用out的則不用。

注意:ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。

如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載。

7樓:正怒月神

無論out 還是ref 如果作為方法的引數,都能得到方法執行後這個引數的變化值。

在我看來區別在於。

ref需要在方法外,也就是傳參的前宣告並賦值。

而out需要在方法內,宣告並賦值。

8樓:網友

out說明這個引數傳入那個方法後在方法內部進行初始化和賦值,在呼叫這個方法時你只需要宣告下就可以了。

ref說明這個引數必須在呼叫前進行初始化或賦值,然後傳入方法後,這個變數在方法內部的任何變動都會保留。

C語言中 與 的區別和1 11的區別

和 是邏輯運算子,和 是位運算子。與 僅當左右為真時值為1,否則為0,如2 1 1 0等於1 或 僅當左右為假時值為0,否則為1,如1 2 0 1等於0 按位與,僅當左右為1是值為1,否則為0,如1 1等於1,1 0等於0 按位或,僅當左右為0時值為0,否則為1,如0 0等於0,0 1等於1 和 屬...

c語言位運算,c語言中 與 的區別

這個很簡單,你開啟電腦的計算器,將521輸入,然後用二進位制顯示,你看到的是 1000001001,123是 1111011 與123 按位與的結果就是0000 1001 用十進位制顯示的時候就是9,其他的計算也是這樣算出來的,你試下就知道了,在此我就不一一舉例了。這是與操作,只有1 1才能是1 這...

C語言中sizeof與strlen的區別是什麼

sizeof 是被測試型別百占用位元組的大度小 strlen是以 0為結束問符答的字串的串長度 不含結束符 比如吧 char p 0123456789abcdef char str 0123456789abcdef char str2 100 0123456789abcdef sizeof p 只是...

c語言中關於和的意思理解,C語言中 和 是什麼意思

代表指標運算子和乘法運算子 代表取位址,與運算子,引用符。用於二目運算中的按位 位運算 與運算 單目是只需要乙個運算元的意思,比如 a a a a 雙目是需要兩個運算元的意思,比如 a b a b a b a b a b 三目是需要三個運算元的意思,比如 a c b?c b 例如 9 5可寫算式如下...

c語言中t 和(t) 有什麼區別嗎

t 和 t 沒有區別!include int main 以上輸出結果均為2 include int main 以上輸出結果均為1 單獨的 t 和 t 計算結果一樣。都是 t 自增 1。如果前面還有東西,例如 ft 和 f t 就不一樣了。f t 是函式呼叫。如果 在字串裡,它們也不 一樣,例如 pr...