Ich habe festgestellt, dass einige Leute die folgende Notation zum Deklarieren von Zeigervariablen verwenden.
(a) char* p;
anstatt
(b) char *p;
Ich benutze (b). Was ist der Grund für die Notation (a)? Notation (b) ist für mich sinnvoller, da der Zeichenzeiger selbst kein Typ ist. Stattdessen ist der Typ ein Zeichen und die Variable kann ein Zeiger auf das Zeichen sein.
char* c;
Es sieht so aus, als gäbe es einen Typ char * und die Variable c ist von diesem Typ. Tatsächlich ist der Typ char und * c (der Speicherort, auf den c zeigt) ist von diesem Typ (char). Wenn Sie mehrere Variablen gleichzeitig deklarieren, wird diese Unterscheidung offensichtlich.
char* c, *d;
Das sieht komisch aus. Sowohl c als auch d sind die gleichen Zeiger, die auf ein Zeichen verweisen. Darin sieht seit dem nächsten natürlicher aus.
char *c, *d;
Vielen Dank.
quelle
char *t
richtig, also kann ich eschar * t;
stattdessen tun . Allerdings habe ich auch häufig gesehenchar* t;
.char
und (a) zeigt p ist apointer to a char
Antworten:
Bjarne Stroustrup sagte:
Quelle: http://www.stroustrup.com/bs_faq2.html#whitespace
Ich würde den letzteren Stil empfehlen, da Sie in der Situation, in der Sie mehrere Zeiger in einer einzigen Zeile deklarieren (Ihr viertes Beispiel), das Sternchen mit der Variablen gewohnt sind.
quelle
int *p
, was bedeutet: Wennp
dereferenziert wird, bekomme ich eineint
. Dann werden mehrere Deklarationen durch getrennt,
Sinn:int *p, *q, r
(wennp
oderq
dereferenziert wird, bekomme ich eineint
, wennr
referenziert wird, bekomme ich eineint
). Auch die Funktionszeigersyntax ist sinnvoll:int (*f)()
(wennf
dereferenziert und aufgerufen wird, bekomme ich eineint
). Und das macht Sinn :int *p, (*f)()
.int*
. Für michint *p, (*f)()
macht das nicht viel Sinn, aber ich kann sehen, wie es für manche Menschen in bestimmten Situationen wäre.void*
(und überhaupt nicht für C ++ - Referenzen).Ich persönlich bevorzuge es, das
*
mit dem Rest des Typs zu platzierenDie Leute werden argumentieren "aber dann
char* p, q;
wird es irreführend", zu dem ich sage, "also tu das nicht".quelle
cout << *p;
. Warum also nicht den Stern während der Deklaration vorher setzenp
:*p
? Meiner Meinung nach wäre es weniger verwirrend.Es gibt keinen Unterschied, wie man schreibt. Wenn Sie jedoch zwei oder mehr Zeiger in einer Zeile deklarieren möchten, verwenden Sie besser die Variante (b), da klar ist, was Sie möchten. Schauen Sie unten:
quelle
typedef
ist "natürlich" kein besserer Weg. Einige Leute bevorzugen es vielleicht, aber es ist problematisch, wenn mehrere Personen mit Ihrem Code arbeiten. Wenn ich nicht daran gewöhntPCHAR
bin, könnte ich so etwas schreibenPCHAR *p;
, was einchar**
und nicht das ist, was ich beabsichtige. Wenn Sie einen möchtenchar**
, müssen Sie im AllgemeinenPCHAR*
einen neuen Typ schreiben oder definieren, und dann wird er einfach nur dumm.Der Kompromiss ist
K & R verwendet
Es liegt an Ihnen, es sei denn, Sie folgen einem Codierungsstandard. In diesem Fall sollten Sie den Anweisungen aller anderen folgen.
quelle
char* p;
. Es ist eine Frage des Stils, nicht der Konvention oder der Regeln. Für mich ist es sinnvoller, dass p vom Typ istchar*
, daher sollte das * offensichtlich mit dem Typ sein.clang-format
sowieso verwenden.Es ist alles eine Frage der Präferenz, persönlich bei Projekten, bei denen ich das Zeichen * sehe. Ich neige dazu, mehrere Zeiger in separaten Zeilen zu deklarieren. Es gibt keinen wirklichen "richtigen" Weg, dies zu tun, und alles hängt von den Vorlieben ab. Einige sagen, es sei einfacher, (a) zu lesen, während andere sagen, dass (b) es einfacher ist, mehr Variablen desselben Typs in derselben Zeile zu deklarieren.
Ich finde (b) häufiger, und in einigen Fällen habe ich gesehen
oder sowas. Wieder Präferenz. Was auch immer Sie mögen oder was auch immer das Projekt, an dem ich arbeite, verwendet, ich werde es verwenden (es sei denn, ich schreibe es selbst. In diesem Fall verwende ich (a)).
quelle