Was ist Ihre Lieblingsmethode, um einen Zeiger zu deklarieren?
int* i;
oder
int *i;
oder
int * i;
oder
int*i;
Bitte erklären Sie warum.
Siehe auch: http://www.stroustrup.com/bs_faq2.html#whitespace
c
coding-style
pointers
lesmana
quelle
quelle
int*i;
- Weißraum wächst nicht auf Bäumen, wissen Sie ...Antworten:
Wenn du schreibst:
Sie schlagen irreführend vor, dass alle i, j und k Zeiger auf sind
int
.Ich behaupte, es ist besser, das * an den Variablennamen anzuhängen.
quelle
int * i;
dass es sich nur deshalb nicht um einen Konkurrenten handelt, weil es auf einen Blick wie eine Multiplikation aussieht.int*
als Typ betrachtet wird undint* i, j
zwei Zeiger deklariert. Die Frage könnte als unvollständig angesehen werden - es hängt von der verwendeten Sprache ab, welche Stile angemessen sind. In CI folgeint *x
ich, in C # mache ich es anders.Ich bevorzuge,
int* i
weili
es den Typ "Zeiger auf ein int" hat, und ich glaube, dies macht es mit dem Typsystem einheitlich. Natürlich tritt das bekannte Verhalten ein, wenn versucht wird, mehrere Zeiger auf einer Zeile zu definieren (das Sternchen muss vor jedem Variablennamen stehen, um einen Zeiger zu deklarieren), aber ich deklariere Zeiger einfach nicht auf diese Weise. Ich denke auch, dass es ein schwerwiegender Fehler in C-Sprachen ist.quelle
*i
hat eine Art vonint
.Für C, wo wir keinen starken Fokus auf Typen haben, bevorzuge ich:
int *i;
Weil es eine Betonung auf dem hat
int
, nicht auf dem Zeiger. Was ist dasint
?*i
ist die int.quelle
int i = 5
den Wert von habeni
, verwenden Sie den Nameni
. Ebenso verwenden Sie, wenn Sie habenint *i; *i = 5
, um den Wert zu erhalten*i
.Ich habe
int* i
jahrelang bevorzugt . Es gibt jedoch ein starkes Argument dafür,int *i
dass Sie sich bei Verwendung des früheren Stils immer noch an die Mehrfachdeklarationsregel erinnern müssen:Weil Sie sich an diese Regel erinnern müssen, gewinnen Sie nicht einfach - aber ich würde auch nicht sagen, dass sie komplexer ist. Das Vermeiden mehrerer Deklarationen in einer Zeile ist nur eine andere Möglichkeit, um zu sagen, dass Sie sich an diese Regel erinnern. Der Unterschied zwischen den beiden Stilen ist umstritten.
Selbst wenn ich es verwende, fühlt es sich ein bisschen albern an, so zu tun, als würde die C-Deklarationssyntax anders funktionieren, als dies der Fall ist, indem das Sternchen neben dem Typ und nicht neben der Variablen platziert wird, an die es syntaktisch gebunden ist.
Ich kaufe nicht in , dass man betont den Zeigertyp (z
i
) , während die andere den int - Typen (für betont*i
), aber das kann sein , dass nach 15 Jahren von C und C ++ verwendet, ist es einfach ist , wenn ich es sehe, ohne darüber nachdenken müssen - etwas, was die meisten Anfänger, die diese Frage stellen, noch nicht können.Auch wenn ich es vorziehen würde, finde ich es nicht unangenehm, Code in einem anderen Stil zu lesen / schreiben. Beständigkeit, bla bla bla.
Keine Notwendigkeit zu erwähnen
int * i
.quelle
Ich bevorzuge den ersten. Es ist natürlich, ein Zeiger zu sein, das gehört zum Typ.
Da ich C # verwende, werden Typen intuitiver behandelt als in C, sodass es kein Problem gibt, mehrere Zeiger in derselben Anweisung zu deklarieren:
quelle
Ich bevorzuge
int* i
(C ++ - Stil).Ich vermeide die Deklaration mehrerer Variablen in einer Anweisung aufgrund der daraus resultierenden visuellen Mehrdeutigkeit (
int* i, j
).Weitere Informationen finden Sie in den häufig gestellten Fragen zu C ++ - Stil und Technik von Bjarne Stroustrup .
quelle
Wenn Sie mehrere Variablen deklarieren möchten, aber das Sternchen nicht wiederholen möchten:
(Wie Sie in der Strukturvorlage sehen können, bevorzuge ich den
int* i
Stil.)Und hier ist eine allgemeinere Lösung:
Dieser funktioniert mit jedem "problematischen Typ", zum Beispiel Arrays und Referenzen:
quelle
typedef int* int_ptr
hätte den Trick getan. Klar, ich muss ein neues typedef für verschiedene Zeigertypen deklarieren, aber wie viele werden das in der Praxis sein? Höchstens acht?Ich würde gehen,
int* i;
da der erste Teil den Variablentyp (Zeiger auf int) bezeichnet, während der zweite Teil den Namen (i
) bezeichnet. Es würde für mich keinen Sinn ergeben, dass der Typint
und der Name sind*i
. Außerdemint * i;
sieht ein bisschen wie Multiplikation zu mir.quelle
In Erklärungen, die ich verwende
int * i;
, liest du es alsi is a pointer to an integer
.Der Zeiger trägt sowohl zum Typ als auch zur Variablen bei, sodass er sich in der Mitte befinden sollte.
Es ist eine gute Sache zu vermeiden, mehrere Dinge in derselben Zeile zu deklarieren:
int * i, j;
quelle
Ich verwende eigentlich alle drei Konventionen unter bestimmten Umständen. Auf den ersten Blick scheine ich inkonsistent, aber ...
int *
Wenn der Bezeichner nicht vorhanden ist, um visuell zu verdeutlichen, dass der Name nicht vorhanden ist.int* intptr
ontypedef
s und ähnliche Erklärungen, um visuell zu verdeutlichen, dass es sich um einen Teil des Typs handelt. Ähnlich bei Funktionszeigerdeklarationen:(int* (*foo)(int))
int *identifier
undclass &identifier
auf Funktionsparametern, um visuell zu verdeutlichen, dass der Parameter möglicherweise ein sogenannter "out" -Parameter ist.const int * const * const
wann immer ich cv qualifier benutze .int * foo;
auf lokalen Erklärungen.Ich denke, ich bin etwas visuell orientiert.
quelle
In C gibt es keine Zeigertypen! "Int *" bedeutet also nichts. Das Sternchen ist immer an das rechts davon geschriebene Element gebunden, es gehört zu dem rechts davon stehenden Element. "* i" ist ein Int. Und weil * i ein int ist, folgt daraus, dass i ein Zeiger auf int ist. Das ist die Logik dahinter und deshalb ist "int * i" die einzig mögliche Lösung. Alles andere ist eine Illusion (die in den meisten Fällen vom Compiler automatisch korrigiert wird). In C ++ und C # ist das etwas anderes. Aber für C gibt es nur eine Bibel: "Dennis M. Ritchie: Die Programmiersprache C". Dennis (RIP!) Hat es geschrieben: "int * i". Dies muss nicht in Frage gestellt werden.
quelle
int*
ist ein Zeigertyp.Ich benutze,
int *i
weil es einfacher ist zu sehen, dass es ein Zeiger ist, obwohl ich nicht denke, dass es wirklich wichtig ist.quelle