這些天學習c#
,看到裡面的值型別與引用型別,例如結構是值型別,類是引用型別,然後立馬想到了
c++中的類,那麼
c++中的類是什麼型別呢,哈哈,忽然間有點迷惑,上網搜了搜還真有很多小夥伴們已經暈進去了,今天就總結一下c#與
c++中值型別與引用型別的區別。
其實c#
中值型別與引用型別的根本區別就是變數包含的資料在哪個記憶體區間上,值型別在堆疊中直接包含,引用型別在堆中間接引用,例如,
c#中例項化類必需要下面的語法:
class name = newclass();
很容易看出來,類是在堆中分配的空間,然後讓name
指向的分配空間。
那麼c++
中有沒有值型別與引用型別呢,學過
c++的都知道,
c++中沒有專門區分出值型別與引用型別,
c++中的引用型別也和
c#中的引用型別不同,
c++中的引用型別是說給乙個變數起別名,無論這個變數是在哪個記憶體區域中,例如以下兩個引用方式: 一、
int b = 12;
int* a = &b;
int* &c = a;
二、int* b = newint;
int* & a =b;
從上面可以看出,c++
中的引用其實就是對乙個變數起的乙個別名,引用的內部實現方式其實也是通過指標實現的。但是
c#中引用型別的變數儲存對其資料(物件)的引用,而值型別的變數直接包含其資料。差別還是很大的。
那麼c++
中的類相當於是
c#中的什麼型別呢,我們可以看看
c++中的類是分配在哪個記憶體區域中,請看以下兩種宣告類的方式:
第一種直接宣告,類分配在堆疊中:
classa{};
aa;第二種通過
new分配記憶體,類分配在堆中:
classa{};
a*a = new a();
通過以上兩種方式我們也差不多可以分辨出來
c++中相對於
c#中值型別與引用型別的區別了,第一種類的宣告方式是把類宣告在堆疊中,其實也就是對應的
c#中的值型別,第二種累的宣告方式是把類宣告在堆中,其實也就是對應的
c#中的引用型別。
隨手一寫,希望給同樣初學的小夥伴們一些提示,**有錯誤希望大家指出來,謝謝。
值型別與引用型別(中
本文將介紹以下內容 1.引言 上回 第八回 品味型別 值型別與引用型別 上 記憶體有理 的發布,受到大家的不少關注,我們從記憶體的角度了解了值型別和引用型別的所以然,留下的任務當然是如何應用型別的不同特點在系統設計 效能優化等方面發揮其作用。因此,本回是對上回有力的補充,同時應朋友的希望,我們盡力從...
C 值型別與引用型別
1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...
c 引用型別與值型別
c 的值型別包括 結構體 數值型別,bool型,使用者定義的結構體 列舉,可空型別。c 的引用型別包括 陣列,使用者定義的類 介面 委託,object,字串。在c 中函式傳值的特點 1.對於複雜的資料型別,按引用傳遞的效率更高,因為在按值傳遞時,必須複製大量的資料 2.除非特別指定,所有的引用型別都...