值類型的變量直接存儲數據,而引用類型的變量持有的是數據的引用,數據存儲在數據堆中。c++
值類型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱爲值類型。值類型變量聲明後,無論是否已經賦值,編譯器爲其分配內存。算法
引用類型(reference type):string 和 class統稱爲引用類型。當聲明一個類時,只在棧中分配一小片內存用於容納一個地址,而此時並無爲其分配堆上的內存空間。當使用 new 建立一個類的實例時,分配堆上的空間,並把堆上空間的地址保存到棧上分配的小片空間中。數組
值類型的實例一般是在線程棧上分配的(靜態分配),可是在某些情形下能夠存儲在堆中。引用類型的對象老是在進程堆中分配(動態分配)。數據結構
1)範圍方面數據結構和算法
2)內存分配方面函數
3)適用場合spa
值類型在內存管理方面具備更好的效率,而且不支持多態,適合用作存儲數據的載體;引用類型支持多態,適合用於定義應用程序的行爲。.net
1)C語言中的結構體不能爲空線程
2) C語言中的結構體只涉及到數據結構 對象
1)概念
class和struct的語法基本相同,從聲明到使用,都很類似,可是struct的約束要比class多,理論上,struct能作到的class都能作到,但class能作到的stuct卻不必定作的到。
2)類型
struct是值類型,class是引用類型,所以它們具備全部值類型和引用類型之間的差別。
3)效率
因爲堆棧的執行效率要比堆的執行效率高,可是堆棧資源卻頗有限,不適合處理邏輯複雜的大對象,所以struct經常使用來處理做爲基類型對待的小對象,而class來處理某個商業邏輯。
4)關係
struct不只能繼承也能被繼承 ,並且能夠實現接口,不過Class能夠徹底擴展。內部結構有區別,struct只能添加帶參的構造函數,不能使用abstract和protected等修飾符,不能初始化實例字段。
參考文章:
http://blog.csdn.net/loving_forever_/article/details/51483828#comments
http://blog.csdn.net/qiaoquan3/article/details/51202926#comments