c 資料型別的值傳遞和引用傳遞 基礎拾遺

2022-03-01 18:02:17 字數 765 閱讀 8324

竟然一不小心犯了低階錯誤,資料型別的值型別和引用型別弄混了。

想用list記錄下所有的二維陣列值,結果發現list裡所有的值都是一樣的。

c#資料型別分為兩大類:值型別和引用型別。

值型別資料主要有:結構體struct,列舉體enum,布林型bool,浮點型,整型。

引用型別資料主要有:陣列,字串,介面,委託,類。

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

引用型別繼承自system.object,值型別繼承自system.valuetype。

引用型別儲存到記憶體的堆heap中,值型別儲存在記憶體的堆疊stack中。在.net中,棧的記憶體是自動釋放的,而堆會有垃圾**器gc來釋放。

引用型別可以派生出新的型別,而值型別不可以。引用型別可以包含null值,而值型別不可以。

引用型別變數賦值只複製物件的引用,不複製物件本身。而將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。

想用list記錄下所有的二維陣列值,結果發現list裡所有的值都是一樣的。

1.錯誤的使用。只new一次,所有的變數valuelst1 實際上是乙個值,同乙個位址。

private

void

test()

}

valuelst1裡所有值都是[9,10]。

2正確。每次重新new

private

void

test2()

}

valuelst1的值分別是[0,0],[1,2].......

關於C 值型別,引用型別,值傳遞,引用傳遞

說到引數傳遞,必須得弄清值型別和引用型別 為了容易表達,我暫且命名存放在堆中的內容為堆中物件,存放在棧上的內容為棧中物件。值型別存放在棧中,直接訪問。如果有 int a 0 int b a 就產生了兩個棧中物件。引用型別需要在堆中顯式分配,且不能直接訪問,需要在棧中分配乙個棧中物件 c 叫指標,c ...

C 值傳遞和引用傳遞

概念 在定義函式時函式括號中的變數名成為形式引數,簡稱形參或虛擬引數 在主調函式中呼叫乙個函式時,該函式括號中的引數名稱為實際引數,簡稱實參,實參可以是常量 變數或表示式。注意 c語言中實參和形參之間的資料傳遞是單向的值傳遞。被呼叫函式的形參只有函式被呼叫時才會臨時分配儲存單元,一旦呼叫結束占用的記...

C 值傳遞 指標傳遞和引用傳遞(C )

一 基本介紹 1 值傳遞 形參是實參的副本 複製 拷貝 形參值的改變不會影響實參的值,這種方式用的最多。2 指標傳遞 形參是指標型別,形參作指標運算後指向的就是實參,所以會影響實參的值,這種方式用的也很多。引數。這種方式用的也蠻多的。引用只是乙個別名 二 示例 1 值傳遞 1 include voi...