C 解惑 值型別和引用型別

2021-07-22 17:16:18 字數 488 閱讀 2531

值型別將資料和記憶體都儲存在同一位置,而乙個引用型別則會有乙個指向實際記憶體區域的指標。

通過下圖,我們可以看到乙個名為i的整形資料型別,它的值被賦值到另乙個名為j的整形資料型別。他們的值都被儲存到了棧上。

當我們將乙個int型別的值賦值到另乙個int型別的值時,它實際上是建立了乙個完全不同的副本。換句話說,如果你改變了其中某乙個的值,另乙個不會發生改變。於是,這些種類的資料型別被稱為「值型別」。

當我們建立乙個物件並且將此物件賦值給另外乙個物件時,他們彼此都指向了如下圖**段所示的記憶體中同一塊區域。因此,當我們將obj賦值給obj1時,他們都指向了堆中的同一塊區域。換句話說,如果此時我們改變了其中任何乙個,另乙個都會受到影響,這也說明了他們為何被稱為「引用型別」。

在.net中,變數是儲存到棧還是堆中完全取決於其所屬的資料型別。比如:『string』或『object』屬於引用型別,而其他.net基元資料型別則會被分配到棧上。下圖則詳細地展示了在.net預置型別中,哪些是值型別,哪些又是引用型別。

C 值型別和引用型別

c 資料型別 值型別,引用型別 概念 值型別直接儲存其值,引用型別儲存對值的引用 這兩種型別儲存在記憶體的不同地方 值型別儲存在堆疊中,引用型別儲存在託管堆上。乙個引用型別的例子,如圖 上圖中,只有乙個user物件,u1和u2都指向包含該物件的記憶體位置 執行結果 在c 中,基本資料型別如bool和...

c 值型別和引用型別

今天我們來學習一下什麼是值型別和引用型別。1.值型別的值存在棧上,引用型別棧上存的是位址,值在堆上 2.將乙個值型別變數賦給另乙個值型別變數時,將複製包含的值。引用型別變數的賦值只複製對物件的引用,而不複製物件本身。3.裝箱是將值型別轉換為引用型別,拆箱是將引用型別轉換為值型別,利用裝箱和拆箱功能,...

C 值型別和引用型別

型別被分為兩種 值型別 整數,bool,struct 建構函式 char 字元 小數 引用型別 string 陣列 自定義的類,內建的類,物件.兩者在記憶體中的儲存方式 值型別 只需要一段單獨的記憶體,用於儲存實際的資料,單獨定義的時候放在棧中 引用型別 需要兩段記憶體 第一段儲存實際的資料,它總是...