Pointer in while loop und inkrement!



  • Hallo Leute! Ich habe hier ein beispiel, dass ich nicht so ganz verstehe.

    void puts(char *string)
    {
    while(*string)
     putchar(*string++);
    }
    

    Meine Frage:
    1)Was bewirkt der Ausdruck *string in der while schleife,
    2)was macht das Inkrement *string++ in der Zeile putchar(*string++) ???

    Meine Lösung zu 1 wäre, dass der Ausdruck *string sobald wie möglich stoppt, wenn *sting '\0n' erreicht.

    Bin leider mit Pointern noch nicht so gut vertraut und nach ählichen Beispielen im Internet habe ich vergeblich gesucht. Danke für jede Hilfe.



  • Der * ist der Dereferenzierungsoperator. Da wird auf den Wert auf den der Zeiger verwesit zugegriffen.

    Die while-Schleife läuft solange die Bedingung wahr ist. Alles ungleich 0 gilt in C als wahr.
    Deine Lösung ist also richtig.

    Das Postinkrement (++ nach dem Namen) greift erst auf den Variablen/Zeiger-Wert zu und erhöht ihn dann.
    Also wird zuerst (mit dem 😉 der Wert an der Speicherstelle ausgelesen und dann der Zeiger erhöt.



  • Also, kann ich das so verstehen, dass der Zeiger solange erhöht wird, solange der *string Zeiger in der while Schleife ungleich 0 ist, also wahr??

    Wie könnte ich das erweitern, um etwas auszugeben. Um es besser zu vestehen. Dachte da an sowas hier:

    #include<stdio.h>
    
    char string = 'HalloWelt';
    
    void puts(char *string)
    {
    while(*string)
     putchar(*string++);
    }
    

    Vielen Dank DirkB



  • In einen char passt genau ein Zeichen rein.
    Zeichenketten(Strings) deklariert man als Konstaten

    char* s = "abcx";
    

    oder als char-Arrays

    char s[] = "abcx";
    


  • Hallo CJosef,

    danke erstmal für die schnelle Rückmeldung.

    Habe jetzt beide Varianten ausprobiert. Wollte die Zeichen später auch einlesen, aber vorerst zum laufen bringen, um das Postinkrement und Zeiger in der Schleife besser zu verstehen.

    Leider bekomme ich mit folgendem Code diese Fehlermeldung:

    5: error: conflicting types for 'puts'

    #include<stdio.h>
    
    char* s = "abcx";
    
    void puts(char *string)
    {
    while(*string)
     putchar(*string++);
    }
    


  • Die Funktion puts gibt es schon, einfach anders nennen.


Anmelden zum Antworten