在c++中,內存可以是靜態分配的——編譯器在處理源代碼的時候就分配,也可以是動態分配的---程序在 運行的時候調用所需要得庫函數進行分配。這兩種分配方式各有個的優點。由于靜態內存分配是在程序運行之前就分配了內存,所以執行的效率就很高。但是缺乏靈活性。它要求知道程序在之前就知道內存的類型和數目。
例如:
利用靜態分配的字符串數組,我們就無法很容易的處理和存貯任意的文本文件。一般來說存貯未知的的數目的元素,需要動態分配內存的靈活性。
例如:以下的定義:
int ival=1024;
指示編譯器分配足夠的內存來存貯一個整型值。該存儲區與名字ival相關聯。然后用1024區初始化該存貯區,這些都是在程序之前完成的。
c++支持用指針類型來存放對象的內存地址值。
例如:
為了聲明一個存放ival內存地址的的指針類型。我們可以聲明如下:
int *print;//////一個指向int類型的指針。
c++預定一個專門取地址的操作符(&),當他應用于一個對象上的時候,返回的是該對象的地址。
因此,為了將ival的地址值賦值給print,我們可以寫為:
int*print;
print=&ival;///把ival的地址值賦值給print
為了訪問print所指向的內容。我們必須先用解引用(dereference)操作符(*),來先解除的引用。
例如:我們通過print間接的給ival加1;
*print=*print+1;
等價于:
直接對 ival進行操作
ival=ival+1;
在c++中指針主要是用來管理和分配動態分配的內存。
對象的分配可以通過兩個不同的版本來實現。
第一個版本用于分配特定類型的單個對象。
int*print=new int 1024);
分配了一個沒有名字的int類型的對象,對象的初始化值為1024。然后表達式返回對象在內存中的地址。
接著這個地址用來初始化指針對象print. 對于動態分配的內存。唯一的訪問方式是通過指針來訪問。
例如:
new的第二個版本,用于分配特定的類型和維數的數組。
int *pia=new int[4];
分配了一個含有4個元素的整型數組。不幸的是我們沒有辦法給動態分配的數組每個值顯示的指定一個初始值。
分配動態數組,一個常令人困惑的問題是,返回值只是一個指針。與分配單一對象的返回值是相同的。
例如:
利用靜態分配的字符串數組,我們就無法很容易的處理和存貯任意的文本文件。一般來說存貯未知的的數目的元素,需要動態分配內存的靈活性。
例如:以下的定義:
int ival=1024;
指示編譯器分配足夠的內存來存貯一個整型值。該存儲區與名字ival相關聯。然后用1024區初始化該存貯區,這些都是在程序之前完成的。
c++支持用指針類型來存放對象的內存地址值。
例如:
為了聲明一個存放ival內存地址的的指針類型。我們可以聲明如下:
int *print;//////一個指向int類型的指針。
c++預定一個專門取地址的操作符(&),當他應用于一個對象上的時候,返回的是該對象的地址。
因此,為了將ival的地址值賦值給print,我們可以寫為:
int*print;
print=&ival;///把ival的地址值賦值給print
為了訪問print所指向的內容。我們必須先用解引用(dereference)操作符(*),來先解除的引用。
例如:我們通過print間接的給ival加1;
*print=*print+1;
等價于:
直接對 ival進行操作
ival=ival+1;
在c++中指針主要是用來管理和分配動態分配的內存。
對象的分配可以通過兩個不同的版本來實現。
第一個版本用于分配特定類型的單個對象。
int*print=new int 1024);
分配了一個沒有名字的int類型的對象,對象的初始化值為1024。然后表達式返回對象在內存中的地址。
接著這個地址用來初始化指針對象print. 對于動態分配的內存。唯一的訪問方式是通過指針來訪問。
例如:
new的第二個版本,用于分配特定的類型和維數的數組。
int *pia=new int[4];
分配了一個含有4個元素的整型數組。不幸的是我們沒有辦法給動態分配的數組每個值顯示的指定一個初始值。
分配動態數組,一個常令人困惑的問題是,返回值只是一個指針。與分配單一對象的返回值是相同的。