Verständisfrage zu C-Syntax
-
Hallo,
ich hab gerade ein Stück Code gefunden, dass mich sehr irritiert, ich dachte eig. ich verstehe mittlerweile die Syntax von C:
main(v,c)char**c;{for( v[c++]="Hello, world!\n)"; /* <= Mein Compiler(gcc) liefert hier keinen Fehler ?? */ (!!c)[*c]&&(v--||--c&&execlp(*c,*c,c[!!c]+!!c,!c)); **c=!c)write(!!*c,*c,!!**c);}
der Rest des Codes is mir erstmal egal, es geht mir nur um die kommentierte Zeile, v hat den Typen int und c is ein char **, ich dachte ich kann einen skalartypen nicht mit Index ansprechen (ohne die adresse zu casten oder sowas) und außerdem muss ein Index vom Typ ein Int sein oder?
mfg
Simon
-
a[b] ist definiert als *(a+b), Summanden kann man vertauschen: *(b+a), das ist also dasselbe wie b[a]
-
Danke erstmal für die schnelle Antwort.
Ok, so macht das Sinn, aber typmäßig trotzdem grausam, aber das is halt C.
Ich hab in letzter wohl zuviel Haskell gemacht...
-
Bashar schrieb:
a[b] ist definiert als *(a+b), Summanden kann man vertauschen: *(b+a), das ist also dasselbe wie b[a]
meint du wirklich, der grund fürs umdrehen-können der array-syntax in C ist, weil addition - wie sagt man so schön - 'kommutativ' ist?
-
Selbstverständlich.
-
Der code ist einfach nur bullshit... wer macht denn so schrecklichen code!