2014-09-29 145 views
0

當我編寫代碼以在C++的免費商店中分配內存時,我很想知道如何爲該數據分配指針。例如:在免費商店中分配內存

如我聲明和初始化像這樣一個指針,

 unsigned short int * pPointer = new unsigned short int; 
    *pPointer = value; 
    delete pPointer; 

是4個字節;使用新的關鍵字分配在免費商店,我可以分配一個值到該地址。但我的問題是,爲什麼我需要重新建立它的類型才能分配我的指針?

我想要做的事: unsigned short int * pPointer = new pPointer
容易嗎?

的Javascript將使用的方法

 newMethod = new Method() 

來訪問方法構件的數據。

但我得到如何使用指針。

 pPointer = member data address and *pPointer = member data value 

,每次我嘗試像,

int * pLocal = &pPointer 

拋出一個錯誤。無法將int **轉換爲int * 正試圖保留相同的內存空間,這就是爲什麼我無法將其地址保存在其保留的內存中的另一個指針。

對不起,如果這是令人困惑,但我只是想知道如何分配內存的空閒存儲和使用指針訪問它已經有一個類型的sizeof()內存默認需要在新關鍵字後的另一種類型聲明?

+2

'pPointer'是一個'int *'(指向'int'的指針)。 '&pPointer'是'pPointer'的地址,其類型爲'int **'(一個指向'int'的指針),它與'int *'不同,這就是爲什麼你會得到這個錯誤。 – 2014-09-29 20:52:24

+0

我明白更清楚。謝謝您的評論。 – AllenRobins 2014-09-30 14:53:18

回答

1

但我的問題是,爲什麼我需要重新建立它的類型才能分配我的指針?

當您使用new進行分配時,您需要提供類型。這是因爲編譯器不知道你在分配什麼,並且它需要這個類型,以便在給定某些信息(即有多少字節是類型,對齊等)的情況下爲該特定類型建立正確的分配策略。

請注意,類型不會總是與指針相同。例如,如果您有基類B和派生類D,則可以將基類指針指派給派生類實例的地址(即B* ptr = new D)。

的Javascript會使用的方法

newMethod = new Method() 

JavaScript沒有指針,new不起作用在語言一樣。它只是創建給定類(函數)的新實例。

+0

我看到它的作用是因爲你的評論,編譯器不知道我分配的東西,就像數據需要賦予編譯器正確分配數據的特定類型一樣。謝謝你的幫助。 – AllenRobins 2014-09-30 14:56:55