一 什麼是值型別與引用型別?
c#與大多數物件導向語言資料型別一樣,分為值型別與引用型別兩種?如何區分這兩種型別?如圖:
根據型別結構圖我們得出:
1.值型別包括 內建資料型別如(int double float) 使用者自定義值型別(struct 結構體) 列舉(emun)
2.引用型別包括 介面型別 類型別等等。
知道了那些型別屬於值型別與那些型別屬於引用型別之後,我們來分析一下值型別與引用型別的區別分別是什麼?
首先繼續看圖:
根據上圖我們可以看出,我們計算機記憶體可以分為堆(.net中是託管堆)和棧兩個區域!理解了這個後我們來看值型別和引用型別的區別:
1 值型別:值型別如 int double float 等這些基礎資料型別,實際的值都是分配在棧上!
如上圖 **: 1//
在棧上分配乙個空間 存放10
2inta =
10; 34
//在堆上分配乙個空間存放變數a的值10,在棧上分配乙個空間存放該值在堆中的位址
5objecto =
a;好的了解基本值型別與引用型別的概念後我們來深入分析他們的本質。
二 值型別與引用型別剖析
1 值型別
值型別是分配在棧中,根據棧的原理,值型別一旦離開當前程式的作用域就會被立刻銷毀!那麼我定義兩個相同的值型別會怎麼樣呢?看如下**:
static
void
main()
",a.tostring());
console.writeline(
"b =
",b.tostring());
} //
作用域結束 銷毀a 和 b 所分配的位址空間
執行結果:
2 引用型別
1class
myclass25
6class
program7"
, mc1.a);
28console.writeline(
"mc2.a =
", mc2.a);
2930}31
}執行結果如下:
C語言資料型別(三) 變數與常量
一 什麼是變數?變數的特點?什麼是變數?其值在其作用域內可以改變的量成為變數。乙個變數應該有乙個名字,在記憶體中佔據一定的儲存空間。變數在使用前必須要定義,每個變數都有自己的位址,變數依據其定義的型別,分為不同型別,如整型變數,字元型變數,浮點型變數,指標型變數等。變數的值可以發生改變,意味著它可以...
C 資料型別 變數
資料型別 整數 4種 int 32位整數 short 16 long 64 byte 8 浮點型 3種 float 32位浮點數 精確到小數點後7位 double 64位浮點數 精確到小數點後15 20位 decimal 128位浮點數 精確到小數點後28 29位 布林型 bool true fal...
C語言基礎二 資料型別 常量與變數
1 資料型別 基本資料型別 整型 unsigned int 32位系統下佔4個位元組 unsigned short 2 unsigned long 4 字元型 unsigned char 1個位元組 實 型 單精度 float 4 雙精度 double 8 構造資料型別 陣列 int a 10 結構...