值傳遞與引用傳遞01

2022-01-30 12:29:24 字數 1522 閱讀 5066

值型別的變數  vs   引用型別的變數

值型別:結構體,列舉,int、char、bool、decimal、double

引用型別:陣列、自定義類、string、介面、集合、object

儲存的地方:

值型別的值是儲存在記憶體的棧當中。

引用型別的值是儲存在記憶體的堆當中。

下圖展示了值型別與引用型別在計算機中的儲存方式

值型別的 int num = 10;  在記憶體中,是被儲存在棧上的空間中;

引用型別的 string s = "123"; 在記憶體中,堆上位址為0x001001的空間中儲存了 「123」,然後,棧上面儲存的是堆上空間的位址 0x001001 。

我們自定義的類 person zs = new person(); zs.name = "張三";  在記憶體中,堆上位址為0x010101的空間中儲存了zs這個物件,包括這個物件的name屬性的值。,然後,我們可以在棧上找到其在堆上的位址0x010101 。

值型別我們稱之為值傳遞,引用型別我們稱之為引用傳遞。

值型別和引用型別的區別:

1.  值型別和引用型別在記憶體上儲存的地方不一樣。

2.  在傳遞

值型別和傳遞引用型別的時候,傳遞的方式不一樣。

3.      int、double等型別在未賦予初值的時候,預設值為0;引用型別在未賦予初值的時候,值為null。

class

program

static

void main(string

args)

,j = ,k =

",i,j,k);  

//輸出結果 i = 11,j = 20,k = 10

person p1 = new person(20

); person p2 = p1; //

p2與p1指向了同一塊記憶體

p1._age++; //

p1對記憶體中的變數進行操作後,通過p2取出變數的值,變數的值當然會發生改變

console.writeline("

p1._age = ,p2._age = ,

", p1._age, p2._age);

//輸出:p1._age = 21,p2._age = 21

setpersonage(p2,

30);//

通過函式來傳遞的情形也是相同的

console.writeline("

after setage.");

console.writeline(

"p1._age = ,p2._age = ,

", p1._age, p2._age);

//輸出:p1._age = 30,p2._age = 30

}

public

class

person}}

引用傳遞與值傳遞

看 define n 10000 define n 10000 ini set memory limit 1g function microtime float function printarray0 arr 引用傳遞 function printarray1 arr 值傳遞 for i 0 i ...

值傳遞與引用傳遞

分析 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。由於x 1 是在test方法棧裡面執行的,所以只會改變test方法棧裡面的x值,而不會改變main方法棧裡面的x值 形參的改變不會影響實參 引用傳遞,傳遞的是實際引數的位址.傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同乙個引用 同乙個記...

值傳遞與引用傳遞

值傳遞,只是傳遞副本,而引用傳遞,是傳遞乙個位址 using system using system.collections.generic using system.linq using system.text v console.writeline 引用傳遞,結果為!r static void ...