C – Initialisierung von Zeigern, Sternchenposition [duplicate]

Lesezeit: 4 Minuten

Benutzer-Avatar
Psihodelie

Wie platziert man Sternchen am besten? Wieso den?

1)    type*     var;
2)    type      *var;

  • Du hast vergessen type * var.

    – pmg

    17. November 2010 um 9:28 Uhr

  • Noch ein weiteres Duplikat von Was ist Ihr bevorzugter Zeigerdeklarationsstil und warum?, Typdeklaration – Zeigersternchenposition, …

    – Café

    17. November 2010 um 11:03 Uhr


  • @pmg gibt es auch typedef type* typePTR

    – ruslik

    17. November 2010 um 11:14 Uhr

  • Für Schließen gestimmt. Unabhängig vom Stil wird es stets geparst werden als type (*var);.

    – Johannes Bode

    17. November 2010 um 12:39 Uhr

  • Der doppelte Beitrag ist weg, also denke ich, dass dieser Beitrag wieder geöffnet werden sollte … es sei denn, es gibt ein weiteres genaues Duplikat …

    – Chutsu

    3. November 2012 um 16:22 Uhr

Benutzer-Avatar
SubniC

Es spielt keine Rolle, solange Sie nur einen Zeiger deklarieren. Es wird normalerweise wie im zweiten Beispiel geschrieben (in dem Code, den ich normalerweise lese/schreibe), aber für den Compiler ist es dasselbe.

Das Problem kann auftreten, wenn Sie mehr als einen Zeiger deklarieren. Dies deklariert beispielsweise nicht zwei Zeiger, sondern einen Zeiger und eine Variable vom Typ type.

type* var1, var2;

Sie müssen stattdessen Folgendes tun:

type* var1, *var2;

Ich ziehe es vor, immer das * neben der var zu verwenden.

Zeiger ist der Typ, und ich denke, es ist am sinnvollsten, die Typinformationen zu gruppieren:

int* foo;

Dies kann zu Verwirrung führen, wenn mehrere Variablen in derselben Zeile definiert sind:

int* foo, bar;  // foo will be int*, bar will be int

Die Lösung hierfür ist, niemals mehrere Variablen in derselben Zeile zu deklarieren. Etwas das Code abgeschlossen Befürworter jedenfalls.

Benutzer-Avatar
Arkku

Beide arbeiten. Ich würde argumentieren, dass # 1 klarer ist Allgemeinesaber in C irreführend und kann zu Fehlern führen, zB:

type* var1, var2;

// This actually means:

type *var1;
type var2;

Ich würde also sagen, dass #2 in C idiomatischer ist und daher empfohlen wird, besonders wenn Sie nicht der einzige Programmierer sind, der an dem Code arbeitet (es sei denn, Sie sind sich natürlich alle auf einen Stil einig).

Wie andere angemerkt haben, funktionieren beide gut, und das falsche hat tatsächlich den Vorteil der syntaktischen Ökonomie.

So wie ich es sehe, besteht eine Deklaration aus Typ gefolgt von der Variable.

<type> <variable>;

int   ii;
int* pii;

Also, wenn Sie die wegnehmen Variablewas bleibt ist die Typ. Welches ist int und int* Oben. Der Compiler behandelt int* als Typ intern (das ist Zeiger auf einen int).

C unterstützt diese Syntax leider nicht nahtlos. Wenn Sie mehrere Variablen desselben Typs deklarieren, sollten Sie Folgendes tun können:

<type> <variable>, <variable>, <variable>;

was Sie mit einem Zeigertyp nicht können:

int* ii1, ii2, ii3;

deklariert ii1 vom Typ int* und der Rest des Typs int. Um dies zu vermeiden, mache ich es mir zur Gewohnheit, nur eine Variable pro Zeile zu deklarieren.

Ich habe gehört, dass argumentiert wurde, dass * technisch gesehen ein Modifikator für die Variable ist, und dies wird durch die Notwendigkeit belegt, * in Deklarationen mit mehreren Variablen mehrmals zu verwenden, z. int *p, *q, *r;

Ich stelle es mir jedoch gerne als Modifikation des Basistyps vor, da dies in Prototypen vorkommt. z.B. void func(int*);

.PMCD.

PS. Ich weiß, dass ich deinem Problem nicht geholfen habe 🙂

  • Ich schreibe nie int* (ohne Leerzeichen) in Prototypen, es sei denn, ich treffe Spalte 80. IMO int * (mit Leerzeichen) ist klarer.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    17. November 2010 um 9:56 Uhr

Benutzer-Avatar
DavideDM

Der zweite Modus ist richtig. Die anderen Modi sind für Programmieranfänger nicht so klar. Von der Form int*-Variable wird normalerweise abgeraten

  • Ich schreibe nie int* (ohne Leerzeichen) in Prototypen, es sei denn, ich treffe Spalte 80. IMO int * (mit Leerzeichen) ist klarer.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    17. November 2010 um 9:56 Uhr

Benutzer-Avatar
Ruel

Das wäre eher die Präferenz eines Programmierers.

Für mich deklariere ich Zeiger durch:

int * var1, var2;

Worin var1 ist ein Zeiger, und var2 ist nicht. Wenn Sie mehrere Zeiger in einer Zeile deklarieren möchten:

int * var1, * var2;

Und natürlich sind die anderen Möglichkeiten gültig.

1283030cookie-checkC – Initialisierung von Zeigern, Sternchenposition [duplicate]

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

Privacy policy