每乙個程式在執行時都占用一塊可用的記憶體空間,用於存放動態分配的物件,此記憶體空間成為程式的自由儲存區或堆。c++使用new和delete表示式實現咋說自由儲存區內分配儲存空間。
陣列變數通過指標型別、陣列名稱 和維數來定義。而動態分配陣列時,只需要指定型別和陣列長度,不必為陣列物件命名,new表示式返回指向新分配陣列的第乙個元素的指標:
int *pia=new int[10];
此new表示式分配了乙個含有十個int型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標pia;
new表示式需要指定指標型別以及在方括號中的維數,該維數可以是任意的複雜表示式。建立陣列後,new將返回指向陣列第乙個元素的指標。在自由儲存中建立的陣列物件是沒有名字的,程式猿只能通過其位址間接的訪問堆中的物件。
2.初始化動態分配的陣列
動態分配陣列時,如果陣列元素具有類型別,將使用該類的預設建構函式實現初始化;如果陣列元素是內建型別,則無初始化:
string *psa=new string[10];
int *pis=new int[10];
第乙個陣列是string型別的,分配了儲存物件的記憶體空間以後,將呼叫string型別的預設建構函式一次初始化陣列元素中的每個元素。第二個陣列則具有內建型別的元素,分配了儲存10個int物件的記憶體空間,但這些元素並沒有初始化。
可以用跟在陣列長度後面的也對圓括號,對陣列進行初始化;
int *pia2=new int[10](0)//全部初始化為0;
3.const物件的動態陣列
如果我們在自由儲存區中建立的陣列儲存了內建型別的const物件,則必須為這個陣列物件提供初始化:因為陣列元素都是const物件,無法賦值。
const int *pci=new const int[100];//error
const int *pci=new const int[100]();//ok
const string *pcs=new const string[100];//ok
在這裡將使用string類的預設建構函式初始化陣列元素。
4.動態空間的釋放
c++語言為指標提供delete 【】表示式來刪除釋放指標所指向的陣列空間。
C 建立動態陣列
int sum 0 arraylist al new arraylist private void button1 click object sender,eventargs e while str null str string line new string al.count 1 al.copy...
C 建立動態陣列
靜態陣列放在堆疊,動態陣列放在堆 自由儲存區 c語言建立動態陣列 int p int malloc n sizeof int free p c 建立動態陣列 int pia new int n 內建型別沒有初始化 string psa new string 10 預設的建構函式初始化 int pia...
建立動態陣列(c語言)
我們在剛開始學陣列的時候大都會犯這麼乙個小錯誤 int a n 執行後就會出現bug,也就是說,c語言不允許對陣列的大小做動態定義。這個規則使得我們在解決一些問題的時候很不方便,動態的陣列就很好地解決了這一問題,下面就來看看動態陣列。標頭檔案 includ malloc函式的引數為所需申請記憶體的大...