C 引用型別和值型別的適用場合和區別

2022-09-26 03:12:12 字數 958 閱讀 5599

1.值型別

值型別包括:數值型別,結構體www.cppcns.com,bool型,使用者定義的結構體,列舉,可空型別。

值型別的變數直接儲存資料,分配在託管棧中。變數會在建立它們的方法返回時自動釋放。

所有的值型別都是密封(seal)的,所以無法派生出新的值型別。

2.引用型別

引用型別包括:陣列,使用者定義的類、介面、委託,object,字元程式設計客棧串,null型別,類。

引用型別的變數持有的是資料的引用,資料儲存在資料堆,分配在託管堆中,變數並不會在建立它們的方法結束時釋放記憶體,它們所占用的記憶體會被clr中的垃圾**機制釋放。 

clr常用簡寫詞語,clr是公共語言執行庫(common language runtime)和j**a虛擬機器一樣也是乙個執行時環境,它負責資源管理(記憶體分配和垃圾收集等),並保證應用和底層作業系統之間必要的分離。

3.值型別與引用型別區別:

4.適用場合:

值型別在記憶體管理方面具有更好的效率,並且不支援多型,適合用做儲存資料的載體;引用型別支援多型,適合用於定義應用程式的行為。

引用型別可以派生出新的型別,而值型別不能,因為所有的值型別都是密封的。

引用型別可包含null值,值型別不能(可空型別功能允許將null賦給值型別,如int a=null);

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

5.裝箱和拆箱

www.cppcns.com1)裝箱就是將乙個值型別轉換成等值的引用型別

在堆上為新生成的物件(該物件包含資料,物件本身沒有名稱)分配記憶體。

將堆疊上值型別變數的值拷貝到堆上的物件中。

將堆上建立的物件的位址返回給引用型別變數(從程式設計師角度看,這個變數的名稱就好像堆上物件的名稱一樣)。

2)拆箱就是將乙個引用型別轉換成等值的值型別

將引用型別變數堆上的值拷貝到棧上面。

總結

C 值型別和引用型別

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

c 值型別和引用型別

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

C 值型別和引用型別

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