C 值型別和引用型別

2021-10-25 08:10:22 字數 1119 閱讀 1738

目錄

一、概念

二、資料型別

三、二者的比較

四、二者的聯絡

補充:值型別:直接儲存值,在棧上儲存其值

值型別引用型別

**繼承自system.valuetype

繼承自system.object

用途表示實際資料

表示指向儲存在記憶體堆中的資料的指標或引用

資料儲存位置

儲存在記憶體的棧中

儲存在記憶體的堆中,而記憶體單元中只存放堆中物件的位址

變數存放的型別

直接存放實際的資料

存放資料的位址,即物件的引用

儲存位置上

變數直接把變數的值儲存在堆疊中

變數把實際資料的位址儲存在堆疊中,把實際資料則儲存在堆中

繼承性密封的,不能作為其他任何型別的基類,可以單繼承或多繼承介面

一般都具有繼承性

變數值不可為null,值型別都會自動初始化為0值

預設情況下,建立為null值,表示指向任何託管堆的引用位址。對值為null的引用型別的操作,都會丟擲nullreferenceexception異常

值型別和引用型別能夠互相轉換,即為裝箱和拆箱操作:

裝箱在值型別向引用型別轉換時發生,將乙個資料項(副本)從棧中自動複製到堆中的行為。

int i = 8; 

object o = i;   // 裝箱 // 首先在堆中開闢出一片區域,再將 i 的乙個副本放在該區域中。 

// 所有引用都必須引用堆上的物件

拆箱在引用型別向值型別轉換時發生,將乙個資料項(副本)從堆中自動複製到棧中的行為。

int i = 8; 

object o = i;   // 裝箱 

i = (int)o;     // 拆箱 // 此處使用強制型別轉換(cast)

託管堆:是clr(公共語言資料庫)中自動記憶體管理的基礎。初始化新程序時,執行時會為程序保留乙個連續的位址空間區域,這個保留的位址空間被稱為託管堆。

C 值型別和引用型別

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

c 值型別和引用型別

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

C 值型別和引用型別

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