C Pointer-Rätsel

Der Thread hatte von Anfang an keinen hilfesuchenden Charakter, sondern offenbar lediglich das Ziel, Leute mit Aufgaben zu typisierten Zeigern zu beschäftigen, obwohl die Lösung Deinerseits ja schon bekannt ist - andererseits obläge Dir nicht die Kompetenz zu entscheiden, ob eingegangene Lösungen korrekt oder falsch sind.
Lösungen posten war von Anfang an nicht das Ziel dieses Threads.

Mich interessiert jetzt vorrangig, welche Diskussion Du Dir hier erhofft hast?
 
Man hätte zB über die Funktionsweise von Pointern und die Prioritäten der Operatoren diskutieren können und vor allem denjenigen, die das nicht so gut beherrschen, die Sache erklären können. Es ist ja noch kein Meister vom Himmel gefallen.

Falls es noch jemanden interessiert, die Lösung ist "POINTERSTEW" bzw. "POINT" "ER" "ST" "EW".
 
Der gepostete Code ist in meinen Augen das perfekte Beispiel, wie man mit übertrieben häufiger Verwendung von Operatoren bzw. Referenzierung und Dereferenzierung von Zeigern missverständlichen und damit schlecht wartbaren Code fabrizieren kann.

Übungen zum Festigen des Verständnisses im Umgang von (typisierten) Zeigern sehen für mich anders aus.

Für mich höchstens eine Aufgabe, die ich bei einem Einstellungsgespräch lösen wollen würde. Selbiges Gespräch würde von mir mit der Diskussion über Software-Qualität - speziell Refactoring - fortgesetzt werden.

-----

Auch wir können gern auf dieser Ebene weiter diskutieren.
 
Zuletzt bearbeitet:
Hey, könnte jmd das Codebeispiel mal so Klammern, dass man das Ganze
nachvollziehen kann und die Prioritäten daraus hervorgehen.

Ich kann ich die iwie Lösung nicht so ganz nachvollziehen,
wäre nett :)

Bis zu POINTER gehts ja noch...^^

Code:
char* c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char** cp[]  = { c + 3, c + 2, c + 1, c };
char*** cpp = cp;

// main-Methode blabla
printf( "%s", **(++cpp)); //cpp +1 -> cp[2] -> c + 2 -> POINT
printf( "%s", (*(--(*(++cpp))))+3); //cpp +2 -> cp[3] -> c +1 -> c -> c  (+ 3) = ER
printf( "%s", (*(cpp[-2]))+3); // cpp -> c+3 -> (c+3) (+3) = ST
printf( "%s", (cpp[-1][-1])+1); //

jetzt hängts bischen...
 
Zuletzt bearbeitet: (Versuch es mal selbst)
Ich habe es mal in einem Bild ausgedrückt. So sollte es verständlich sein. Die Lösung in Worte zu fassen, wird etwas schwierig. ^^

unbenannt-png.206552



(Benennung und farbliche Kennzeichnung ist nicht ganz akkurat. Bei den Paragraphenreitern hier muss man das aber immer extra sagen, sonst heult wieder jemand.)
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    54,2 KB · Aufrufe: 429
Zuletzt bearbeitet:
Danke, sehr interessant. Bei uns an der Uni war der Schwerpunkt Java und OCAML, sodass tatsächlich viele Informatik-Bachelorabsolventen bei uns mit C garnicht mehr in Berührung gekommen sind.

Auch ich bin in C wahrlich kein wandelndes Kompetenzzentrum.
 
F_GXdx schrieb:
Danke, sehr interessant. Bei uns an der Uni war der Schwerpunkt Java und OCAML, sodass tatsächlich viele Informatik-Bachelorabsolventen bei uns mit C garnicht mehr in Berührung gekommen sind.

Auch ich bin in C wahrlich kein wandelndes Kompetenzzentrum.

Ein Informatikstudium ohne C ? Das klingt ja furchtbar. Slebst bei Medien -und Wirtschaftsinformatikern sollte das immer dazu gehoeren.

Edit: Btw. Ziemlich cooles Raetsel. Hab mir wirklich den Kopf zerbrochen aber ein paar Sachen waren mir dann doch nicht ganz klar. Gerade was die Prioritaeten angeht.

Nachdem du die Grafik schon gepostet hast hier nochmal eine detaillierte Beschreibung: http://msmvps.com/blogs/kernelmustard/archive/2005/05/02/45437.aspx

MfG
 
Zuletzt bearbeitet:
Joa ohne C gibts schon^^ Bei uns ist es so, dass wir mit Scheme und Python anfangen und später wahlweise C++ oder Java.

Auf jeden Fall ein witziges Beispiel, man darf es nur nicht zu ernst nehmen, ist eben ein Rätsel, manche Leute haben da Spaß dran :)
 
Zurück
Oben