Syntax fuer Zeiger?



  • Hallo zusammen,

    habe mich in einem Buch mal mit Zeigern beschaeftigt.War auch so weit in Ordnung und zu verstehen.
    Nun meine Frage:

    Zeiger werden ja (laut dem Buch) so angelegt:

    Bsp:

    char* charZgr;
    

    Nun habe ich aber des Oefteren Zeilen gesehen in denen das Sternchen
    vor dem Variablennamen steht.
    Bsp:

    char *strg = "Die Zange im Mund...";
    

    Was ist denn dann damit gemeint, bzw. wo ist der Unterschied? 😕



  • das ist Sache deines Programmier Stils.

    Die einen machen das so, die anderen so. Wie du es machst, ist im Endeffekt egal und eher eine Glaubenssache.

    (btw. ich glaube an

    char *foo;
    

    ;))



  • du kannst auch

    char
    *
    foo
    =
    "hallo"
    ;
    

    schreiben - leerzeichen (und newlines) kann man fast überall einfügen 🙂



  • Hi,

    haderlump22 schrieb:

    char *strg = "Die Zange im Mund...";
    

    Das kommt mir bekannt vor :D. Die grösseren IDE's wie VC oder
    Borland C++ schreiben das immer besonders hässlich (meine Meinung).

    void   * pointer;
    

    Das regt mich immer wieder auf.
    mfg BlueShift



  • C Programmierer schreiben das * meistens an den Variablnennamen, C++ Programmierer an den Typ. Das hängt wohl auch damit zusammen, dass es in C++ Referenzen (&) gibt, die an den Typ gehängt werden, und man das mit Zeigern halt genauso macht.
    Früher hab ich das * auch immer an den Namen gehängt, weil sich damit die wenigsten syntaktischen Probleme ergaben.

    int *a, *b
    

    Wie macht man das nun, wenn das * an den Typ gehängt werden soll? C++ Programmierer schreiben die Variablen deshalb auch oft einzeln.

    int* a;
    int* b;
    

    Mittlerweile schreibe ich das * immer an den Typ, da es für mich logischer ist. Denn die Zeiger Spezifikation gehört nun mal zum Typ und nicht zum Variablennamen. Aber wie gesagt, es ist halt Geschmackssache. Weder ist das eine falsch noch das andere ausschliesslich richtig. Mach es am besten so, dass es zu deinem Schreibstil passt. Nur mach es dann immer so, nicht da mal auf die eine Weise und hier mal auf eine andere Weise.



  • groovemaster2002 schrieb:

    Das hängt wohl auch damit zusammen, dass es in C++ Referenzen (&) gibt, die an den Typ gehängt werden, und man das mit Zeigern halt genauso macht.

    Ich kenne genug Leute die
    char &c=x;
    schreiben...

    Die schreiben dann auch

    foo &bar();
    //bzw.
    foo *bar();
    

    als ob * (bzw. &) zur Funktion gehören würde 😉



  • Hatte am Anfang auch immer *char foo; geschrieben, aber bei Referenzen (C++)
    char & foo; geschrieben und inzwischen schreibe ich irgendwie meist
    char * foo; also in der Mitte, wie bei der Referenz, da ich teilweise
    fand, dass man es sonst nicht sofort sieht bzw. es gequetscht wirkte.
    Mehrere Zeiger würde ich so schreiben: char * foo, * bar;



  • groovemaster2002 schrieb:

    Mittlerweile schreibe ich das * immer an den Typ, da es für mich logischer ist. Denn die Zeiger Spezifikation gehört nun mal zum Typ und nicht zum Variablennamen.

    Und wie machst du das bei Arrays? Das [10] gehört auch zum Typ, steht aber hinter dem Variablennamen. Autsch, und jetzt? Und bei Funktionspointern und ähnlichen Komplikationen siehst du mit der Methode überhaupt kein Land mehr. Von wegen logischer. Logisch ist das, was in der Sprachspezifikation steht, und danach steht der Grundtyp (hier int) alleine, und der Deklarator wird mit *, &, [] und () -- je nachdem was gebraucht wird -- verziert.
    Das alles zwingt einen natürlich nicht, das Leerzeichen an eine bestimmte Stelle zu setzen.

    That said, ich schreibe mal so mal so, meistens aber mit einem Leerzeichen auf beiden Seiten :p



  • @Bashar
    Hier ging es aber nicht um sämtliche Typ Deklaratoren, sondern um Zeiger. Lies dir doch bitte nochmal den ersten Post durch. Dass Funktionszeiger hierbei ein Sonderrolle darstellen ist wohl wahr. Und das man alle Typ Deklaratoren auf die gleiche Weise handeln kann, hab ich auch nie behauptet. Dies wurde bei der Entwicklung von C/C++ wahrscheinlich zu inkonsequent durchgezogen, oder was weis ich. Ich hätte auch nichts dagegen, wenn zB [] an den Typ gehängt wird:

    int[10] a;
    

    Einige Anfänger stolpern sicherlich auch über dieses Problem:

    char* a, b;
    

    a ist ein Zeiger, b nicht. Vielleicht schreiben auch deshalb einige Leute das * lieber an den Variablennamen.



  • groovemaster2002 schrieb:

    Hier ging es aber nicht um sämtliche Typ Deklaratoren, sondern um Zeiger. Lies dir doch bitte nochmal den ersten Post durch. Dass Funktionszeiger hierbei ein Sonderrolle darstellen ist wohl wahr.

    Zeiger sind auch nur eine Art von abgeleitetem Datentyp, warum sollte man die anders behandeln als alle anderen? Hier spielt niemand eine Sonderrolle, alles passiert nach den gleichen Regeln. Auch wenn die syntaktisch einfachsten Typkonstruktoren, Zeiger und Referenzen, vielleicht vielen Anfängern etwas anderes suggerieren.


Anmelden zum Antworten