it-swarm.com.de

int * array = new int [n]; Was macht diese Funktion eigentlich?

Ich bin verwirrt darüber, wie man ein dynamisch definiertes Array erstellt:

 int *array = new int[n];

Ich habe keine Ahnung, was das macht. Ich kann erkennen, dass es ein Zeiger namens Array erstellt, das auf ein neues Objekt/Array Int zeigt. Möchte jemand etwas erklären?

16
pauliwago

new weist eine Menge Speicherplatz zu, die zum Speichern des angeforderten Objekts/Arrays erforderlich ist. In diesem Fall sind n Zahlen von int.

Der Zeiger speichert dann die Adresse in diesem Speicherblock.

Aber seien Sie vorsichtig, dieser zugewiesene Speicherblock wird erst dann freigegeben, wenn Sie dies durch Schreiben mitteilen

delete [] array;
19
ANisus
int *array = new int[n];

Es deklariert einen Zeiger auf ein dynamisches Array des Typs int und der Größe n

Eine etwas detailliertere Antwort: new weist Speicher mit der Größe sizeof(int) * n Bytes zu und gibt den Speicher zurück, der in der Variablen array gespeichert ist. Da der Speicher dynamisch mit new zugewiesen wird, müssen Sie ihn manuell freigeben, indem Sie schreiben (wenn Sie dies nicht mehr benötigen):

delete []array;

Andernfalls verliert Ihr Programm mindestens sizeof(int) * n Bytes (möglicherweise mehr, je nach der von der Implementierung verwendeten Zuordnungsstrategie).

9
Nawaz

Die Anweisung führt im Wesentlichen Folgendes aus:

  1. Erzeugt ein ganzzahliges Array von 'n' Elementen
  2. Ordnet den Speicher im HEAP-Speicher des Prozesses zu, während Sie den Operator new verwenden, um den Zeiger zu erstellen
  3. Gibt eine gültige Adresse zurück (falls die Speicherzuordnung für die erforderliche Größe verfügbar ist, wenn zum Zeitpunkt der Ausführung dieser Anweisung verfügbar).
7
aeon

Es reserviert Speicherplatz auf dem Heap gleich einem Integer-Array der Größe N, Und gibt einen Zeiger darauf zurück, der dem Int * -Typ-Zeiger namens "Array" zugewiesen wird

1
DhruvPathak

Es ordnet so viel Platz entsprechend dem Wert von n zu und der Zeiger zeigt auf das Array, d. H. Das erste Element des Arrays

int *array = new int[n];
1
sgokhales

In C/C++ sind Zeiger und Arrays (fast) gleichwertig. int *a; a[0]; gibt *a und a[1]; gibt *(a + 1) zurück

Aber das Array kann den Zeiger, auf den es zeigt, nicht ändern, solange der Zeiger dies kann.

new int[n] reserviert einige Leerzeichen für das "Array"

0
LLS

Ab C++ 11 ist der speichersichere Weg, dies zu tun (immer noch mit einer ähnlichen Konstruktion), mit std::unique_ptr :

std::unique_ptr<int[]> array(new int[n]);

Dadurch wird ein intelligenter Zeiger auf einen Speicherblock erstellt, der groß genug für n-Ganzzahlen ist. Dieser wird automatisch gelöscht, wenn er den Gültigkeitsbereich verlässt. Diese automatische Bereinigung ist wichtig, da dadurch das Szenario vermieden wird, in dem Ihr Code vorzeitig beendet wird und Ihre delete [] array;-Anweisung nie erreicht.

Eine andere (wahrscheinlich bevorzugte) Option wäre die Verwendung von std::vector , wenn Sie ein Array benötigen, das für die dynamische Größenänderung geeignet ist. Dies ist gut, wenn Sie einen unbekannten Speicherplatz benötigen, es hat jedoch einige Nachteile (nicht konstante Zeit zum Hinzufügen/Löschen eines Elements). Sie können ein Array erstellen und Elemente hinzufügen, beispielsweise:

std::vector<int> array;
array.Push_back(1);  // adds 1 to end of array
array.Push_back(2);  // adds 2 to end of array
// array now contains elements [1, 2]
0
Engineero