C 引用型別

2021-07-04 13:47:17 字數 1755 閱讀 9018

1、靜態記憶體和動態記憶體分別對應棧記憶體和堆記憶體嗎?那麼值型別和引用型別的記憶體分配是怎樣的?

堆記憶體就是**執行時動態分配的記憶體。(執行期完成)。

上靜態分配記憶體。引用型別的物件總是在程序堆中動態分配記憶體。對於值型別,如果某個類的例項有個值型別的字段,例如類的成員變數是值型別的,但是類

是引用型別的,那麼這個成員變數也會儲存在堆中。

2、new可以用於靜態分配記憶體嗎?

c++和c#對於物件分配問題,仍然分為靜態分配和動態分配。在c++中需要程式設計師自己去考慮分配問題。也就是什麼時候需要new,

什麼時候只是宣告乙個

引用型別即可。

在c#中,new操作符不但用於物件的動態分配,還可以用於靜態分配。此時,作為c++程式設計師,

會十分迷惑。new到底是怎麼分配靜態記憶體的呢?

在程式中,可見tempstruct就是靜態型別。而new操作符也可以分配值型別的例項,但這種情況下new操作符僅起到向成員函式傳遞引數的作用。

與c++不同,c#的靜態分配必須用new操作符而不能直接向建構函式傳遞引數。在c++中,

tempstruct t1(5);

是可以的。但在c#中必須寫成 tempstruct 他 = new tempstruct(5);

在此強調一下,c#的值型別包括 基本型別(int,double,float……等)struct型別,enum型別;

而引用型別包括class和delegate型別;

c++的引用請見我之前的blog:

其他c++與c#的不同點:

c++ > c# 的引用: "c1"

1、c#中的引用是乙個介於c++引用和指標之間的概念。c#的引用也是到乙個物件的引用,所有該物件可訪問的公有成員都通過 "." 運算子來訪問。

2、不像c++的引用而像c++指標的乙個特點是引用可以為空。

myclass c2 = null;

3、類似c++指標的另乙個特點是c#引用是可以修改的。給定的引用,可以改而指向另乙個同型別的物件。

4、像c++引用而不像c++指標的乙個特點是c#的引用無法用來訪問物件的物理空間(即物件的記憶體位址)。

5、c#所有的類都是引用型別,所有的引用型別都是類或者介面。所有的類都是從system.object類繼承的。引用型別的物件總是儲存在heap中。

6、c#的char型別均為二位元組而且用unicode標準來編碼。在c++中char通常可能是一位元組而且是ascii編碼格式。

7、c#中沒有unsigned關鍵字,現在用byte、ushort、uint和ulong來表示無符號整型。在c#中long 和 ulong的大小都是8位元組。

8、public static [相應的基本型別] parse(string s)。靜態方法能夠解析乙個字串,例如:

bool i = true;

i = system.boolean.parse("false");

int j = system.int32.parse("-55");

9、public string tostring() 該方法將數值寫成乙個字串。這個方法是object類中tostring()方法的覆寫版本。

C 型別基礎 引用型別

上一講說了一下值型別的部分內容,雖然沒有什麼有意思的東西能吸引大家的注意 也沒啥好的 讓大家參考一下 但是樓主的水平實在有限 各位看官如果不嫌棄的話 還是看看吧 如果對你的生活或者學習有那麼一絲幫助的話 都算是樓主的萬幸 當宣告乙個引用型別變數,並使用new 操作符建立引用型別實力的時候 該引用型別...

C 值型別,引用型別

2,引用型別 概念 值型別直接儲存其值,而引用型別儲存對其值的引用。引用型別 string,class,陣列 派生於system.array 委託 派生於system.delegate 介面。引用型別當宣告乙個類時,只在棧中分配一小片記憶體用於容納乙個位址,而此時並沒有為其分配堆上的記憶體空間。3,...

C 引用型別 2)

object c 參考 object 型別在.net framework 中是object 的別名。在c 的統一型別系統中,所有型別 預定義型別 使用者定義型別 引用型別和值型別 都是直接或間接從object繼承的。可以將任何型別的值賦給object 型別的變數。將值型別的變數轉換為物件的過程稱為 ...