Was ist der Unterschied zwischen den folgenden Erklärungen?
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
Was ist die allgemeine Regel für das Verständnis komplexerer Erklärungen?
Was ist der Unterschied zwischen den folgenden Erklärungen?
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
Was ist die allgemeine Regel für das Verständnis komplexerer Erklärungen?
Ich denke, die zweite Erklärung ist für viele verwirrend. Hier ist ein einfacher Weg, sie zu verstehen.
Wir haben ein Array von Ganzzahlen, d.h. int B[8]
.
Wir haben auch eine Variable A, die auf B zeigt. Nun ist der Wert von A gleich B, d. h. (*A) == B
. A zeigt also auf eine Reihe von ganzen Zahlen. In Ihrer Frage ist arr ähnlich zu A.
Ähnlich ist es in int* (*C) [8]
C ist ein Zeiger auf ein Array von Zeigern auf Ganzzahlen.
int *arr1[5]
In dieser Erklärung, arr1
ist ein Array mit 5 Zeigern auf Ganzzahlen. Grund: Eckige Klammern haben einen höheren Vorrang als * (Derefernzierungsoperator). Und bei diesem Typ ist die Anzahl der Zeilen fest (hier 5), aber die Anzahl der Spalten ist variabel.
int (*arr2)[5]
In dieser Erklärung, arr2
ist ein Zeiger auf ein Integer-Array mit 5 Elementen. Grund: Hier haben () Klammern einen höheren Vorrang als []. Und bei diesem Typ ist die Anzahl der Zeilen variabel, aber die Anzahl der Spalten ist fest (hier 5).
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.