引用傳遞理解

2022-03-14 14:48:43 字數 949 閱讀 9675

c#中說值傳遞,應用傳遞,物件傳遞我的理解一直有乙個誤區,最近犯了個低階的錯誤,記錄一下:

1 class cla1

2 ;6 poco.teststaticchange(poco);//-->poco.value = "after change va"

7 poco.testchange(poco);//-->poco.valeu = "after change static"

8 }

9 }10

11public

class poco

12

14public

void testchange(poco poco)

15 ;

18 }

19public

static

void teststaticchange(poco poco)

20 ;

23 }

24 }

通過這個簡單的例子可以看出,在執行到testchange/teststaticchange方法內部時:此時存在兩個對poco類的例項的引用,乙個是cla1類中的引用,即:第5行,另乙個是poco類中的引用,第14/19行,這兩個引用指向同一塊記憶體空間,所以,在poco中,對poco.value進行更改,更改的結果會影響到cla1中的poco.value的取值,而在第17/22行,對方法內部的引用進行重置之後,兩個引用不再指向同乙個記憶體空間,所以更新不會在互相影響

其實這裡所謂的值傳遞和物件傳遞都是值傳遞,只不過所謂的物件傳遞傳的值是乙個記憶體位址,在poco中使用該記憶體位址生成了乙個新的引用

如果使用ref進行該傳遞,則傳遞後的poco中的value更新也會影響到cla1中的value值,因為此時指向該例項記憶體空間的只有乙個引用,這種才是真正的引用傳遞

C 值傳遞 指標傳遞 引用傳遞 理解

最近寫了幾篇深層次討論陣列和指標的文章,其中提到了 c語言中,所有非陣列的形式引數傳遞均以值傳遞形式 而關於值傳遞,指標傳遞,引用傳遞這幾個方面還會存在誤區,所有我覺的有必要在這裡也說明一下 下文會通過例子詳細說明哦 值傳遞 形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來...

用gdb來理解 值傳遞 指標傳遞 引用傳遞

1.常用的gdb命令 1 顯示 list list 顯示10行 list 1 顯示1 10行,再鍵入list或者回車,顯示下面10行 list 1,20 顯示1 20行 2 設定斷點 break break 15 在第15行設定斷點 break func 在函式func 入口設定斷點 info br...

引用傳遞 值傳遞

下面的程式闡述了值傳遞與應用傳遞的區別。package com.liaojianya.chapter1 this program demonstrates the use of array reference.author liao jianya 2016年7月21日 public class ar...