2010-12-20 12 views
2

Das Erstellen eines Arrays kann auf beide Arten erfolgen? Aber ist nicht alles ein Array der Anfang der Array-Adresse und genügend Bytes für den Typ zuordnen. Also meine Frage ist, was ist der Unterschied entweder mit einem Zeiger auf ein Array von Bytes oder mit nur der ersten Option?Pointer Array Frage

int numbers[10]; 

int* num = new int[10]; 
or 
int* num = new int(10); 
+0

Es gibt mehrere Duplikate sind, aber ich bin zu faul, um sie zu gehen und zu finden. – dmckee

Antwort

4

Ihre zweite Version deklariert einen Zeiger auf eine mit 10 initialisierte Ganzzahl. Das ist kein Array.

+0

Was ist int * num [10]; Ein Zeiger auf ein Array von 10 Elementen? – RoR

+2

int * num [10]; gibt ein Array mit zehn int-Zeigern. –

4

int array[10]; hat zwei verschiedene Verhaltensweisen. In einer Funktion verwendet, werden 10 nicht initialisierte Ints auf dem Stapel zugewiesen. Außerhalb einer Funktion werden 10 null-initialisierte Ints im BSS-Speicher zugewiesen.

new int[10]; reserviert zehn nicht initialisierte Ints auf dem Heap.

new int(10); ordnet einen einzigen int auf dem Heap, mit dem Wert 10.

+0

'int array [10]' hat eine dritte Bedeutung innerhalb einer Parameterliste. Dort ** und nur dort ** ist es nur syntaktischer Essig für 'int * array'. Das heißt, Sie können Arrays in C++ nicht nach Wert übergeben. – fredoverflow