int (* p) [4];
Ist "p" Zeiger auf Array von 4 ganzen Zahlen? oder was ??
und wie kann ich "neu" für diesen Zeiger aufrufen?
Ist "p" Zeiger auf Array von 4 ganzen Zahlen?
Richtig!
Wie kann ich "neu" für diesen Zeiger aufrufen?
Zum Beispiel p = new int[7][4]
.
int (*p)[4]
ist tatsächlich ein Zeiger auf ein Array von vier int
s.
Sie können ein Objekt vom Typ "pointer to array of vier int
" wie folgt dynamisch zuweisen:
Beachten Sie, dass kein Platz für int
s zugewiesen ist. nur der Zeiger selbst.
Sie können ein Array von 4 Ints wie folgt zuweisen:
%Vor% Was Sie nicht tun können (ohne explizites Casting), weisen Sie einem Zeiger vom Typ int
einen Zeiger auf ein dynamisch zugewiesenes Array von 4 int (*)[4]
zu. Wenn Sie ein Array über new
zuweisen, ist der Typ des neuen Ausdrucks ein Zeiger auf das erste Element des Arrays, auch wenn Sie einen typedef verwenden. Die Größe des Arrays wird nicht im Typ des new
-Ausdrucks beibehalten.
Dies liegt daran, dass new[]
-Ausdrücke Arrays zuordnen können, bei denen die Größe des Arrays zur Laufzeit ausgewählt wird. Daher wäre es nicht immer möglich (oder sogar wünschenswert), die Array-Größe in den Typ des neuen Ausdrucks zu codieren >
Wie bereits vorgeschlagen, können Sie ein Array mit einem Array von 4 int
dynamisch zuweisen. Die Größe des ersten Arrays geht aus den Typinformationen verloren, und Sie erhalten einen Zeiger auf das erste Element des Arrays (der Größe 1) der Arrays mit vier int
.
Obwohl es sich um ein Array von nur 1 (Arrays von 4 int) handelt, müssen Sie delete[]
noch verwenden, um p
zu entziehen.
Der Online-CDECL-Evaluator ist eine hilfreiche Ressource für Fragen wie das:
%Vor%Tags und Links c++