507 Stimmen

C Zeiger auf Array/Array von Zeigern Disambiguierung

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?

0voto

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.

0voto

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).

-9voto

Nikhil Punkte 11

In Zeiger auf eine ganze Zahl, wenn Zeiger erhöht wird, dann geht es nächste ganze Zahl.

im Array des Zeigers, wenn der Zeiger inkrementiert wird, springt er zum nächsten Array

CodeJaeger.com

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.

Powered by:

X