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! 👎


Anmelden zum Antworten