Obfuscated C
-
Hi!
Ich beschäftige mich derzeit mit den Programmen auf dieser Seite: http://www0.us.ioccc.org/years.html . Leider verstehe ich folgenden Teil des Programmes anonymous.c nicht ganz:i["]<i;++i){--i;}"]
Kann mir das irgendjemand etwas genauer erklären?
greetz, phreaking
-
Wenn das wirklich stimmt, dann liefert dir das den speicherbereich dieses String als index wert...
so aus dem zusammenhang gerissen ist das aber nicht so leicht zu sagen...
-
Dem kann ich mich nur anschließen: Resultat ist (falls i in einen Zeiger oder einen anderen ganzahligen numerischen Wert umwandelbar ist) i + Addresse vom String
-
Genauer: jeder String der Form "xxx" im Quelltext liefert im Kontext eines Ausdrucks seine Addresse als Resultat.
Ein Array-Ausdruck der Form a[n] ist äquivalent zu *(a + n).
-
Ne Leute, das ist Blödsinn.
a[b] ist äquivalent zu b[a]; somit ist i["string"] äquivalent zu "string"[i]. Mit anderen Worten: i ist der Index in diesen String. 0["string"], bzw. "string"[0] ist z.b. 's'
-
Danke für die Hilfe... jetzt hab ich's verstanden (obwohl ich auch selbst darauf kommmen hätte sollen )
greetz, phreaking
[ Dieser Beitrag wurde am 24.05.2002 um 07:02 Uhr von phreaking editiert. ]
-
@Bashar:
Das ist kein Blödsinn.
Und richtig muss es heissen: i["string"] ist äquivalent zu "string"[&i]
-
Original erstellt von DrZoidberg:
Und richtig muss es heissen: i["string"] ist äquivalent zu "string"[&i]Es gilt:
a[b] <=> *(a+b) <=> *(b+a) <=> b[a]
Das mit dem Ampersand ist nicht sonderlich logisch und falsch.
-
Diese Diskussion ist noch nicht zu Ende. Bitte weitermachen...
-
und ansonsten dienst der String (zusammen mit dem i++ danach) nur dazu, die Anzahl der Schleifendurchläufe zu bestimmen, in der die read/write Funktion aufgerufen wird.