C 值型別與引用型別總結

2021-07-27 07:47:17 字數 2785 閱讀 3476

下面是我關於值型別與引用型別的一些思考,錯誤之處肯定有的,歡迎高人批評指正,幫助進步

c#中,值型別和引用型別是兩個非常重要的概念,下面盡量詳細的闡述,觀點不一定完全正確,歡迎批評指正。

1.記憶體分為堆和棧,值型別的資料儲存在棧中,引用型別的資料儲存在堆中。

2.int numb=10,**中的10是值型別的資料,numb只是乙個指向10的變數而已。其中10儲存在棧中,變數numb也儲存在棧中。

3.person p=new person(),**中 new person()所建立的物件儲存在堆中,變數p儲存在棧中。

4.綜合第2點和第3點所有變數都儲存在棧中,無論此變數儲存的值是值型別和引用型別。

5.值型別包括列舉,結構以及像int,datetime這樣的簡單型別;引用型別包括類,介面,委託等。

6.值型別傳遞的值的拷貝,引用型別傳遞的是值的引用,即此資料在記憶體中的位址,這是最核心的概念,例項展示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

classprogram

;

person lilei =newperson() ;

intage = yaohongbo.age;

yaohongbo.age = 27;

person zhangsan = lilei;

lilei.name ="李磊";

console.writeline("yaohongbo的age:"+yaohongbo.age);

console.writeline("age:"+ age);

console.writeline("lilei的name:"+ lilei.name);

console.writeline("zhangsan的name:"+ zhangsan.name);

console.readkey();

}

}

classperson

//引用型別

publicintage//值型別

}

輸出結果如下圖:

**說明:yaohongbo.age是int型別,為值型別,所以**int age=yaohongbo.age,是將yaohongbo.age變數儲存的值複製了乙份,然後讓變數age儲存這份拷貝,此拷貝和yaohongbo.age無任何關係,所以我們才可以看到上面的輸出結果。

再看**:

1

2

person zhangsan = lilei;

lilei.name ="李磊";

person為自定義類,為引用型別,而引用型別穿的是引用,變數zhangsan指向的資料和變數lilei是同乙個記憶體位址,即同乙個物件,而不是像值型別那樣,拷貝了乙份變數lilei指向的資料給變數zhangsan。所以才會出現無論更改zhangsan韓式lilei的屬性值,其他乙個都會改變的情況。

最後通過一張圖來描述上面**。

C 值型別與引用型別

1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...

c 引用型別與值型別

c 的值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。c 的引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。在c 中函式傳值的特點 1.對於複雜的資料型別,按引用傳遞的效率更高,因為在按值傳遞時,必須複製大量的資料 2.除非特別指定,所有的引用型別都...

C 值型別與引用型別

資料型別分為 值型別 引用型別 值型別 int char double bool 結構 struct 列舉 enum 儲存在堆疊中 引用型別 類 string。陣列 介面 儲存在託管堆中 2.值型別 變數儲存物件的值,賦值會建立值的副本,修改任何乙個副本,不會影響其他的 副本 int x 5 int...