1、所有型別,只宣告的時候都不分配記憶體。 直接使用編譯器會報錯,如輸出操作這種。
2、值型別和string型別,在執行"="運算子的時候,這個運算子的過載函式會給左邊的運算元重新申請一塊記憶體,因此,若左運算元之前沒有分配記憶體,是可以執行=的,而且,這種情況下, 「=」操作符執行的是深拷貝。
3、除了string外的引用型別,未分配記憶體時執行 = 運算子,也都ok,但是這時執行的是淺拷貝。
4、值型別和string型別,在執行 string stra=new string[5]; 這個的時候,是給陣列的所有元素分配記憶體的。 而其他引用型別,執行t ta =new t[5],這個時候,是不給陣列元素分配記憶體的,直接訪問資料元素會報錯,若想在除string外的引用型別的陣列定義的時候給元素分配記憶體,必須 t ta =new t[5]這樣的形式,大括號內需要有建構函式
5、引用型別定義的時候,使用null來初始化,分兩種情況:
①、string物件,使用null或者string.empty初始化,是分配記憶體的,如string str=null; 之後輸出str,是ok的
②、除string外的其他引用型別,使用null初始化,是不分配記憶體的,對其進行引用,編譯會報錯
測試**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace test14
public myclass(int y)
}class program
; //這樣就不報錯
console.writeline(mca1[0].x);
//string str;
//報錯
string str = null;
console.writeline(str); //不報錯,可以執行
//string str=string.empty;
//不報錯,可以執行}}
}
Django查詢資料庫時各種種類的排序
按照entry date從小到大查詢資料,可以寫成 content.objects.order by entry date 從大到小排序 content.objects.order by entry date 下面介紹其他種類的排序 隨機排序 content.objects.order by 但是o...
c 指標(二) 定義變數時的記憶體分配
為什麼要講記憶體分配呢,因為要理解指標的實質,就必須得從理解記憶體開始 1 計算機中記憶體編址 記憶體是乙個存放資料的空間,進行編址之後可以對資料空間進行合理的利用和管理。記憶體編址的基本單位是位元組。2 變數的定義,背後的記憶體分配 int a 當我們定義乙個int型別的變數 a 時,系統就開始準...
C 程式中各種變數的記憶體分配
c 程式中各種變數的記憶體分配 首先可以看下c 程式將記憶體分為幾個區域 1 棧。該記憶體區域一般是由作業系統自動分配的,我們不用考慮刪除問題。函式的引數,函式體中我們定義的變數,一般都是在棧中分配記憶體的。這些記憶體的分配一般在函式呼叫時才分配記憶體 2 堆。堆中分配的記憶體一般是程式設計師自己分...