C 值傳遞與引用傳遞的區別

2021-07-09 02:56:11 字數 2983 閱讀 8271

當實參當作值來傳遞時,就產生的乙個副本,也就是值不發生變化。

class mytest

",number);

} static void modifyvalue(int num)

",num);

} }

程式執行結果為:num=11,number=10;

即number的值不會受num影響,給num賦乙個新值並不會改變number的內容,因為num和number存在於記憶體中不同的位置。

2.通過引用傳遞值型別

(1)使用ref關鍵字時,表示是用引用的方式傳遞引數。實參和形參引用的都是同乙個物件,改變其中乙個的引用值,另乙個也會改變。

class mytest

",number);

} static void modifyvalue(ref int num)

",num);

} }

程式執行結果為:num=21,number=21;即

number

的值會受num影響,隨之值發生改變。

class mytest

",number);

} static void modifyvalue(ref int num)

",num);

} }

程式執行結果為:num=101,number=101; 

注意: ref修飾符在寫函式和呼叫函式時都一定要出現。

3. 交換值型別

/// /// 交換位置

///

public static void inputdata()

和", num1, num2);

// swap(num1, num2); // 交換兩個數的值(值傳遞:值的副本(值不發生變化))

console.writeline("交換後兩個數的值分別為:和", num1, num2);

}/// /// 交換的方法

///

///

///

private static void swap(ref int num1, ref int num2)

// private static void swap(int num1,int num2)

out修飾符與ref修飾符非常相似,除了以下兩點為:

一、在呼叫函式時不需要賦值。

二、在函式退出前必須賦值。

out修飾符通常用於需要從方法中獲取多個返回值的時候

static void substringname(string name, out string firstname, out string lastname)

static void main()

引用型別的變數不直接包含其資料;它包含的是對其資料的引用。當通過值傳遞引用型別的引數時,有可能更改引用所指向的資料,如某類成員的值。但是無法更改引用本身的值;也就是說,不能使用相同的引用為新類分配記憶體並使之在塊外保持。若要這樣做,應使用 ref 或 out 關鍵字傳遞引數。

陣列 arr

為引用型別,在未使用 

ref引數的情況下傳遞給方法。

在此情況下,將向方法傳遞指向 

arr的引用的乙個副本。輸出顯示方法有可能更改陣列元素的內容

static void change(int my)

; // 重新賦值.

system.console.writeline("my: ", my[0]); //-3

}static void main();

system.console.writeline("arr: ", arr[0]); //10

change(arr); //呼叫方法

system.console.writeline("changemethod arr: ", arr[0]); //888

console.readline();

}

在這種情況下,從 

10改為 

888。但是,在 

change

方法內使用 new 運算子來分配新的記憶體部分,將使變數

my引用新的陣列。因此,這之後的任何更改都不會影響原始陣列 

arr(它是在 

main

內建立的)。

2.通過引用傳遞引用型別

使用 

ref關鍵字,方法內發生的任何更改都會影響呼叫程式中的原始變數.

static void change(ref int my)

; // 重新賦值.

system.console.writeline("my: ", my[0]); //-3

}static void main();

system.console.writeline("arr: ", arr[0]); //10

change(ref arr);

system.console.writeline("changemethod arr: ", arr[0]); //-3 值發生變化

console.readline();

}

實際上,使用 

new運算子對原始陣列進行了重新分配。因此,呼叫 

change

方法後,對 

arr的任何引用都將指向 

change

方法中建立的五個元素的陣列。

C 值傳遞與引用傳遞

知識點 值型別和引用型別 對於值型別來說,棧中儲存的是直接使用的資料 對於引用型別來說,棧中儲存的是堆中物件的位址 值傳遞和引用傳遞 對於值傳遞,傳遞的是棧中儲存的資料 對於引用傳遞,傳遞的是棧本身的位址 先看一下值傳遞 傳遞值型別和引用型別 class program 值型別的值傳遞 static...

Java 值傳遞與位址傳遞(引用傳遞)區別

值傳遞 pass by value 是指在呼叫函式時將實際引數複製乙份傳遞到函式中,這樣在函式中如果對 引數 進行修改,將不會影響到實際引數。傳遞物件往往為整型浮點型字元型等基本資料結構。public class passbyvaluereference private static void pa...

值傳遞,指標傳遞,引用傳遞 的區別

值傳遞,指標傳遞,引用傳遞 的區別 值傳遞 從被呼叫函式的角度來說,值傳遞是單向的 實參 形參 引數的值只能傳入,不能傳出 形參為實參的拷貝,形參有單獨的記憶體空間,當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞 指標傳遞 指標傳遞向形參傳遞的為實參的位址,即形參為乙個指向實參位...