C 中值型別和引用型別

2021-07-30 15:39:05 字數 799 閱讀 1586

概念:

1.值型別:資料儲存在記憶體的堆疊中,從堆疊中可以快速地訪問這些資料,因此,值型別表示實際的資料。

2.引用型別:表示指向儲存在記憶體堆中的資料的指標或引用(包括類、介面、陣列和字串)。

c#中定義的值型別包括原型別(sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、bool、decimal)、列舉(enum)、結構(struct)

引用型別包括:類、陣列、介面、委託、字串等。

區別:基本區別在於它們在記憶體中的儲存方式。值型別只將值存放在記憶體中,這些值型別都儲存在堆疊中。原始資料型別(如bool和int)都屬於此型別。而引用型別的記憶體單元中只存放記憶體堆中物件的位址,而物件本身放在記憶體堆中。如果引用的值型別的值是null,則表示未引用任何物件。

堆和堆疊區別:

堆和堆疊是兩個不同的概念,在記憶體中的儲存位置也不相同,

堆一般用於儲存可變長度的資料,如字串型別;

堆疊則用於儲存固定長度的資料,如整型型別的資料int(每個int變數占用四個位元組)。由資料儲存的位置可以得知,當把乙個值變數賦給另乙個值變數時,會在堆疊中儲存兩個完全相同的值;而把乙個引用變數賦給另乙個引用變數,則會在堆疊中儲存對同乙個堆位置的兩個引用,即在堆疊中儲存的是同乙個堆的位址。在進行資料操作時,對於值型別,由於每個變數都有自己的值,因此對乙個變數的操作不會影響到其它變數;對於引用型別的變數,對乙個變數的資料進行操作就是對這個變數在堆中的資料進行操作,如果兩個引用型別的變數引用同乙個物件,實際含義就是它們在堆疊中儲存的堆的位址相同,因此對乙個變數的操作就會影響到引用同乙個物件的另乙個變數。

c 中值型別和引用型別

在c 中有兩種型別的資料,一種是值型別資料,一種是引用型別資料。在編碼的時候區分這兩種型別資料,可以避免一些細小的編碼錯誤。首先說說什麼型別是值型別,例如 int float bool之類的基礎型別,以及用struct定義的型別,如 datetime。除此外,如string,陣列,以及用class定...

C 中值型別和引用型別

本文將介紹c 型別系統中的值型別和引用型別,以及兩者之間的一些區別。同時,還會介紹一下裝箱和拆箱操作。首先,我們看看在c 中哪些型別是值型別,哪些型別是引用型別。值型別 結構型別 struct 列舉型別 enum 引用型別 變數的初始化中,都會有乙個預設值,在c 中,我們可以通過default關鍵字...

c 中值型別與引用型別

c 的值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。c 的引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。陣列的元素,不管是引用型別還是值型別,都儲存在託管堆上。引用型別在棧中儲存乙個引用,其實際的儲存位置位於託管堆。為了方便,這裡將引用型別部署在...