2017-09-17 103 views
-6
int main() 
{ 
    int *y = new int(5); 
    cout << "y = " << y << " &y = " << &y << " *y = " << *y << endl; 
    int *p = new int[5]; 
    cout << "p = " << p << " &p = " << &p << " *p =" << *p << endl; 
} 

之間的區別是什麼?有人可以幫我解釋一下嗎?謝謝!新int()和新int []

+1

您的C++書籍對此有何評論? –

+0

謝謝!這對我很有幫助。 int * y = new int(5)表示將值5賦給* y。但是int [5]意味着做一個5個整數數字的空格。 – Jay

回答

0

您在std::cout中輸出了很多東西,但其中大多數不重要。

嘗試

std::cout << sizeof(int(5)) << " " << sizeof(int[5]) << "\n"; 

將輸出

4 20 

因爲int(5)是指具有5初始化一個整數所以sizeof產生一個int的大小。

另一方面,int[5]是你所期望的:一個由5個整數組成的數組,所以sizeof產生5*sizeof(int)

兩個以上的評論:

  • 創造良好的舊陣列,new是絕對的東西初學者應該切莫。如果您需要動態大小的可索引存儲,請使用std::vector。沒有速度的恐慌。
  • 不要從using namespace std;只需鍵入std::,這使得代碼更具可讀性,並清楚地將你的東西與庫中的東西分開。
+0

幫我加深理解! – Jay

+0

「*沒有速度懲罰*」 - 不正確。使用'std :: vector'時,速度*稍微慢一點。 'new int [5]'分配內存但不填充它。 'vector (5)'(或'vector.resize(5)')分配內存並對其進行初始化。另外,原始指針上的'operator []'只是指針加偏移量的簡單解引用,而'std :: vector'上的'operator []'是必須操作調用堆棧的函數調用。速度差異可以忽略不計,但它們確實存在。 –

+0

@RemyLebeau編譯器將內聯到操作員的調用。 – DrSvanHay

0
int *y = new int(5) 

此分配一個單int並將其值至5,然後分配y在所分配的int指向。

int *p = new int[5] 

此分配的5個int S,其值是最初未定義的陣列,然後分配p在第一int所分配的陣列中的點。

相關問題