C 中關於值型別和引用型別的區別

2022-01-16 02:37:18 字數 934 閱讀 8626

一直以來對於值型別與引用型別之間的區別都不是特別清晰,直到踩了坑....

正好最新閒暇,便想著梳理梳理這一兩年來遇到的奇葩問題和解決方案,順便就把它給拎出來記一下,免得以後再摔跤

今天為了說明值型別與引用型別的典型區別,準備把結構體(值型別)和類(引用型別)拉出來溜溜

/// /// 類

///

class testclass

public string name

}/// /// 結構體

///

struct teststruct

public string name

}

class program

;testclass c2 = c1;//c1給了c2

c2.id = 1;c2.name = "a";

console.writeline($"c1[,]");

//測試值型別

teststruct s1 = new teststruct ;

teststruct s2 = s1;//s1給了s2

好了,結果顯而易見。

c1和s1我一直沒有動過它,s1(值型別)倒是乖乖的,但是c1(引用型別)卻跟著c2變了,由此我們可以想到

值型別的每一次賦值都會執行一次逐字段的複製,引用型別的賦值只是指標的傳遞,其實也是生成新的指標例項。

相關**位址(github)

c 引用型別和值型別區別

解析 clr支援兩種型別 值型別和引用型別。用jeffrey richter clr via c 作者 的話來說,不理解引用型別和值型別區別的程式設計師將會把 引入詭異的陷阱和諸多效能問題 這就要求我們正確理解和使用值型別和引用型別。值型別包括c 的基本型別 用關鍵字int char float等來...

C 值型別和引用型別的區別

c 中 變數型別分兩種 值型別和引用型別 由此引發兩種形式的記憶體空間 堆疊和託管堆 堆疊 又稱棧 存放所有值型別的資料 託管堆 存放所有引用型別的資料 值型別的變數本身就存放資料 而引用型別則儲存實際資料的引用 值型別有個特點,那就是大小都固定,比如乙個位元組的byte 4個位元組的int。即使資...

C 引用型別和值型別的區別

我們都知道,c 的兩大資料型別分別為值型別和引用型別。很多人或許閉著眼睛都能說出值型別包括簡單型別 結構體型別和列舉型別,引用型別包括自定義類 陣列 介面 委託等,但是當被問及到二者之間的聯絡和區別,什麼時候用struct什麼時候用class時,就常常混淆不清了。為此,了解值型別和引用型別的本質差異...