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.