C 高階引數之ref

2021-10-03 15:44:47 字數 1859 閱讀 5908

今天來寫乙個交換值的方法函式

//未使用ref引數

static

void

main

(string

args)

,b="

, a, b)

;textref

(a, b)

; console.

writeline

("呼叫方法後:a=,b="

????what????為什麼沒有交換吶???

這就需要學習到高階引數ref,全稱: reference

原因分析:**中int是值型別,所建立的例項不在託管堆中分配記憶體位址,我們通過方法函式只不過是將資料複製過來,在方法呼叫結束後並不會對mian中的資料進行任何修改。

使用ref試試:

//使用ref引數

static

void

main

(string

args)

,b="

, a, b)

;textref

(ref a,

ref b)

;//呼叫方法時在引數前加ref

console.

writeline

("呼叫方法後:a=,b="

, a, b)

; console.

readkey()

;}public

static

void

textref

(ref

int r1,

refint r2)

//傳入引數前要給引數賦值 ★和out引數進行對比★

原因分析:ref引數修飾變數的傳遞方式是引用傳遞,是對引數的位址進行改變,就像c中的指標一樣,直接能夠對原數進行操作,而不是對原數的那個copy值進行操作。

一句話總結:在方法中對引數所做的任何更改都將反映到該變數上。

拓展:

實參和形參對應ref這麼麻煩為什麼我們要一一對應?嘗試實參或者形參中不寫ref引數結果又會如何?程式會出現異常還是能夠正常編譯?呼叫方法前為對引數賦值又會出現什麼問題?

拓展①:形參中不使用ref引數

實參中不使用ref引數

拓展②:呼叫方法前未對引數賦值

總結:

呼叫方法時必須加ref關鍵字(參考拓展①)

傳入引數前必修給引數賦值(參考拓展②)

每天進步一點點,奧利給。

C 之ref引數和out引數的區別

1 什麼是 ref 引數 2 什麼是 out 引數?1 使用 ref 引數時,傳入的引數必須先被初始化。對 out 引數而言,必須在方法中對其完成初始化。2 使用 ref 和 out 時,在方法的引數和執行方法時,都要加 ref 或 out 關鍵字,以滿足匹配。3 out 適合用在需要 return...

C 方法引數 ref 詳述

前幾日在看到一篇關於 ref 的帖子,想起以往一些同事工作中的錯誤,特作如下筆記。其實這個問題很容易理解,首先在c 中傳遞方法引數預設是 值拷貝 模式,也就是說對於值型別 valuetype 變數直接拷貝乙份,而對於引用型別則拷貝乙個指向同一物件的引用副本傳遞給方法,因此即使不使用ref關鍵字,我們...

C 的out引數和ref引數

剛學c 的時候看過out引數和ref引數的用法,但是一直沒有根據實際專案做過。今天寫webservice介面的時候用到了 本來我是寫乙個方法查詢乙個資料庫,返回乙個dataset給別人呼叫,沒問題,完成了 我的上篇部落格寫有 但是專案總是變化 的,有人要求同時將dataset的總記錄條數也返回給他們...