C List 作為引數傳遞的值變化

2022-01-11 07:44:43 字數 1375 閱讀 7702

namespace

testconsole

static

void test1(listlist)

static

void test2(listlist)

}

可以發現:

經過 test1後,list 的元素數量由 0 變為 1 了,

經過 test2後,list 的元素數量還是0。

1.list型別是引用型別

2.引用本身是類似於乙個「儲存位址的值變數」

所以從方法外部傳入引用到方法裡,那麼其實引用本身是複製了乙份副本來給方法裡使用的,只是說這個複製的引用副本和之前的引用的內容(也就是所指向的物件記憶體位址)是一樣的,所以通過引用操作物件的資料時,可以看到2個引用都操作的同乙個物件;但如果你是修改了引用副本本身的值內容(將該引用指向了乙個新的物件的記憶體位址),那麼是不會影響到之前方法外的那個引用的,所以修改後會發現2個引用所指向的物件不同了

而如果物件引用引數前加上了ref,那麼方法引數所傳遞的不再是引用的副本,而是引用的位址了(即通過引用的位址找到引用,再讀出引用裡儲存的記憶體位址值,再根據則個位址值去找到真正要操作的物件),所以如果此時你再修改這個引用的值時,會根據引用的位址找到方法外的那個引用,然後修改其內容,所以會發現方法外的引用也會指向新的物件了

3這裡有三段**

你可以看看,體會一下:

(1)

list list=new list();

modifylist(list);

console.writeline(list.count)

private

void modifylist(listlist)

(2)

list list=new list();

modifylist(list);

console.writeline(list.count)

private

void modifylist(listlist)

(3)

list list=new list();

list

copy = list; //

複製乙個引用

modifylist(ref

list);

console.writeline(copy.count)

//複製的這個引用仍然指向原來最早的那個list

console.writeline(list.count) //

list這個引用已經在modifylist方法裡被修改了,指向的是在modifylist方法裡新new出來的物件了

private

void modifylist(ref listlist)

參考:

值的引用傳遞 陣列作為函式引數

按值傳遞 按副本傳遞 給函式傳遞變元 引數 時,變元 引數 不會直接傳遞給函式,二十先製作變元 引數 值的副本,儲存在棧上,再使這個副本可用於函式,而不是使用初始值。例如 includevoid change int intmain void change int num 執行結果 num 9 引用...

函式作為引數傳遞

作為學前端的小白,剛開始學到函式作為引數傳遞時,簡直一臉的懵逼,為什麼有時候要加括號,有時候又不用,特別是遇到setinterval的時候。下面是參考網上的一些答案,做的一些總結 要是有什麼錯誤不合理的地方,煩請指正哦 1 首先要理解一點,函式是一種叫做function引用型別的例項,因此函式是乙個...

函式作為引數傳遞

1.當函式作為引數傳遞時,一般使用函式指標 下面是例子 include typedef int func int x,int y 定義函式指標,指向引數為int x int y 返回值為int的函式 intfunc1 int x,int y 函式func1,引數為int x int y 返回值為in...