Unterschied zwischen int* p und int *p Deklaration [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
karthik

Was ist der Unterschied zwischen einem int* p und ein int *p Erklärung?

Es gibt kein Unterschied.

Es ist eine Frage der Notationnicht Semantik. Das zweite ist weniger irreführendWeil

int *a, b;

erklärt eindeutig ein int* und ein intwohingegen

int* a, b;

sieht so aus, als würde es zwei Zeiger deklarieren, obwohl es wirklich dasselbe wie oben tut.

Benutzer-Avatar
Toni Delroy

  • int* p

    • von C++-Programmierern weit verbreitet
    • int* p, q impliziert fälschlicherweise beides p und q sind Zeiger (was dazu führt, dass dies bevorzugt auf zwei Zeilen deklariert wird, was auch die Lesbarkeit bei Zuweisungen verbessert und das schnelle Ausschneiden/Einfügen oder Kommentieren bestimmter Zeilen/Variablen erleichtert)
    • int* p trennt visuell den Typ vom Bezeichner
    • *p zeigt dann eindeutig eine Dereferenzierung an (vorausgesetzt, Sie setzen Leerzeichen um Ihre Binärdatei operator* ala 2 * 3)
    • in C++ ...&x ist eindeutig eine Adresse während ...& x muss eine Referenzvariable deklariert werden, und ... & ... ist der bitweise UND-Operator
  • int *p

    • von C-Programmierern weit verbreitet
    • int *p, q deutlich widerspiegelt p ein Zeiger sein und q nicht sein.
    • int *p verwechselt visuell den Typ mit dem Bezeichner
    • visuell nicht von einer Zeigerdereferenzierung zu unterscheiden (im Guten wie im Schlechten)

Ähnlich für Typen, die in Funktionsdeklarationen vorkommen …

int* f(), g();  // declares int g();
int *h(), (*i)();  // i is pointer to function returning int
int *const*m(), n(); // m returns pointer to (const-pointer to int)
                     // n returns int

…aber zumindest können Funktionsargumente nicht so haarig werden – die Typangabe beginnt nach jedem Kommatrennzeichen neu.

Summarisch, int *p ist besser, wenn Ihr Codierungsstil / Ihre Codebasis mehrere Deklarationen in einer einzigen Zeile des Quellcodes verwendet, andernfalls int* p bietet eine klarere Trennung von Typ und nachfolgendem Bezeichner.

Trotzdem basieren die Vorlieben der Menschen weitgehend auf dem, woran sie gewöhnt sind.

Benutzer-Avatar
Benutzer26742873

Sie sind gleich. Der erste überlegt p Als ein int * Typ, und der zweite betrachtet *p als ein int.

Der zweite sagt Ihnen, wie C-Deklarationen einfach funktionieren: deklarieren, wie verwendet werden würde.

Das Internet ist mit komplexen Ansätzen zum Analysieren von Deklarationen wie „Uhrzeigersinn/Spiralregel“ und „die richtige Regel“ überschwemmt. Menschen machen das Einfache komplex: Warum müssen wir diese Typen laut vorlesen? Wir müssen nur wissen, wie man es benutzt!

Ersteres macht übrigens manchmal wahnsinnig. Bedenken Sie:

int* p, q;

Ihr möchtet p und q beides wird int *aber leider nicht.

Wenn du schreibst int *p, *qdie Dinge werden einfacher sein.

Wie auch immer, Sie können dies versuchen, wenn Sie darauf bestehen, sich einem zu nähern.

typedef int* intp;
intp p, q;

1144210cookie-checkUnterschied zwischen int* p und int *p Deklaration [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy