Bräuchte mal ne kleine Code-erklärung



  • hi, hab folgenden Code gefunden und versucht zu kapieren was hier passiert, aber ich schnall es nicht.

    char s[20];
    char *p = s;
    for(1;p-s<20;p++)
    	*p='0';
    

    Was passiert da ?

    Und warum bekomme ich bei diesem Code hier :

    char s[20];
    printf("%c",s);
    system("pause");
    

    ein "L" ausgegeben ?



  • p zeigt zunächst auf das erste Element von s.
    Mit Zeigern kann man auch rechnen, deswegen gibt p-s die Entfernung zum Anfang des Arrays an. *p='0' dürfte dasselbe wie s[p-s]='0' machen.
    Naja, und so wird eben allen Elementen des Arrays '0' zugewiesen.

    Beim zweiten Beispiel hast du dein char-Array nicht initialisiert, deswegen kann da alles mögliche drin stehen. Auch ein L.



  • toxor schrieb:

    char s[20];
    char *p = s;
    for(1;p-s<20;p++)
    	*p='0';
    

    eine etwas unübliche 'memset'-variante. das array (s) wird mit nullen gefüllt. der pointer p, der mit der adresse von 's' initialisiert wird, wird bei jedem schleifendurchlauf um 1 erhöht, um auf das nächste element zu zeigen, bis dessen unterschied zu 's' >= 20 ist. d.h. das letzte element des arrays wurde erreicht.

    toxor schrieb:

    Und warum bekomme ich bei diesem Code hier :

    char s[20];
    printf("%c",s);
    system("pause");
    

    ein "L" ausgegeben ?

    weil bei 'printf' zwar das s als adresse des arrays ankommt, aber wegen der '%c'-formatangabe zu einem einzelnen zeichen degradiert wird (alle bits, die nicht mehr in ein char passen, werden ignoriert). also entspricht das low-byte der adresse von array 's' dem zeichen 'L'.
    🙂



  • Hi toxor,

    also beim ersten Code versteh ich des so, dass du einfach des char-Array (s) mit Nullen initialisierst!

    Wäre mit ner Schleife einfacher 🙂 :

    char s[20];
    
    int i;
    for (i=0;i<20;i++)
       s[i] = '0';
    

    Beim zweiten Code hab ich leider auch keine Ahnung warum da ausgerechnet 'L' ausgegeben wird!

    Grüße MarioTP



  • super jungs danke für die Antworten



  • MarioTP schrieb:

    Wäre mit ner Schleife einfacher 🙂 :

    vorher war's auch schon ne schleife.
    🙂


Anmelden zum Antworten