2014-09-03 105 views
3

誰能解釋以下兩種形式,什麼之間的區別每個做:()和[]動態分配有什麼區別?

int *p = new int[5]; 

int *p = new int(5); 

查詢

1)什麼是我們在兩種情況下分配即整數或數組?

2)兩種情況下分配後的初始值是多少?

3)和參考從哪裏可以找到有關此

回答

6
int *p = new int[5]; 

分配一個長度爲5的整數「陣列」,它返回一個指向的5個連續存儲器塊的開始,其中的每一個可以持有int

int *p = new int(5); 

分配一個指向單個整數初始化爲值5

10

一個新表達的語法如下:

  1. 關鍵字new
  2. 可選參數,括在括號內
  3. t YPE
  4. 可選初始化

new int[5],類型是int[5]並且沒有初始化。因此,分配了一個數組5 int s,它們不被初始化,並返回指向第一個元素的指針。

new int(5),類型爲int和初始化是(5),所以一個int被分配,它與值5(就像在int x(5);)初始化,並返回一個指向它的指針。

+2

「*他們不會被初始化。*」 ......迂腐來說,他們實際上是默認初始化它在的情況下,內置類型意味着未初始化。 – Nawaz 2014-09-03 04:33:25

+0

@Nawaz由於與C的兼容性,這僅適用於類或方法範圍之外不可訪問的類型。此外,它們不是默認初始化的,而是初始化爲零。 – xvdiff 2014-09-03 05:39:44

+0

@xvdiff:你錯了。搜索*「默認初始化,零初始化和值初始化」*在這個網站上,你會得到很多討論它們的話題。 – Nawaz 2014-09-03 06:13:28

2

方括號用於表示其元素的數組。 所以在此聲明

int *p = new int[5]; 

分配有未初始化5個整數元素的數組。與定義

int a[5]; 

比較在這份聲明中

int *p = new int(5); 

分配有int類型的對象,它是由5初始化。以下定義

int x = int(5); 

或簡單地

int x = 5; 
3

在這裏,我將回答一個

問題1所有的一個問題:什麼我們是在這兩種情況下分配,即整數或數組?

int *p = new int[5]; // you are allocating an array 
int *p = new int(5); // you are allocating an integer 

問題2:兩種情況下分配後的初始值是多少?

int *p = new int[5]; // Initially there will be random value on all indexes 
int *p = new int(5); // Initially value will be 5 

問題3:從哪裏可以找到關於此的參考?

檢查以下鏈接

http://www.cplusplus.com/doc/tutorial/dynamic/

http://en.wikipedia.org/wiki/Initialization_%28programming%29