2017-12-30 25 views
-5

Was ist der Unterschied zwischen den folgenden Arten von Zeigerdeklarationen in c-Sprache?Brauchen Sie Hilfe, um Zeigerdeklaration in c-Sprache zu verstehen

int *p(int a), 
int (*p)(int a), 
int *(*p)(it(*a)[]), 

Es wäre sehr nützlich, wenn einige Beispiele für die richtige Erklärung hinzugefügt werden.

+0

Versuchen Sie https://cdecl.org/ und geben Sie den Ausdruck ohne das 'a' ein Beispiel:' int * (* p) (int (*) []) ' – 4386427

+0

Das einzige, was Sie über die dritte wissen müssen man soll es nie benutzen. Wenn Sie dies tun, werden Sie möglicherweise direkt nach der Überprüfung des Codes entlassen. –

Antwort

1
int *p(int a); 

Ich bezweifle stark, dass es eine Zeigerdeklaration ist. Wenn es besser geschrieben ist, können Sie vielleicht verstehen, dass es eine Funktion ist, die eine int übernimmt und einen Zeiger auf eine int zurückgibt.


int (*p)(int a); 

Ein grundlegender Funktionszeiger. verweist auf eine Funktion, die eine int und eine int zurückgibt. Zum Beispiel:

int foo(int x) { return x+1; } 
p = &foo; 

Der letzte ist ein bisschen kompliziert, weil es ungültig ist. In den Klammern sollte eine Nummer stehen. Ich nehme an, es ist korrigiert (einschließlich eines Tippfehlers) wie unten.

int *(*p)(int(*a)[3]); 

Es ist ein Funktionszeiger, nimmt die Funktion einen Zeiger auf ein Feld von 3 int s, und einen Zeiger auf int zurückzukehren. Zum Beispiel:

int *extract_first(int (*a)[3]) { 
    return (*a); 
} 
p = &extract_first; 
+0

Sind Sie sicher, dass Sie '3' hinzufügen müssen? Ich denke nicht, dass es für C korrekt ist, sondern nur für C++ – 4386427

1

Die erste ist, fa Funktionsdeklaration, ist es ein int nimmt und gibt einen Zeiger zu int, Der zweite ist ein Zeiger auf Funktion einen int zu nehmen und einen int Wenn das zurückkehr dritte hätte sein sollen:

int * (*p) (int(*a)[]); 

Es ist ein Zeiger auf Funktion einen Zeiger zu einem-Array-of-int und Zurücksenden eines pointer-to-int nehmen.

Verwandte Themen