Pointer, hmm schwer, wer weiss es?



  • Ich habe folgendes "Programm"

    Was ich denke und was ich nicht weiss, mach in den kommentar

    /* Kalauer.c */
    
    # include <stdio.h>
    
    char *c[] = {
       "SUN",
       "ATOF",
       "PROGRAM",
       "TAKE",
       "REGISTER",
       "POINT",
       "FILES"
    };
    
    char **cp[] = { c+6, c+5, c+4, c+3, c+2, c+1, c };  // Pointer auf pointer, würde nicht *cp[] auch gehen? warum muss ich **cp[] machen?
    
    char ***cpp = cp;  // Pointer auf Pointer auf Pointer
    
    int main ( void ) {
    
       printf("%s\n", **++cpp );   // ++cp, also nächster Eintrag und ausgeben "POINT"
       printf("%s\n", **++cpp + 6 );  // nochmal nächster aber dann ab inclusive dem 6ten zeichen
       printf("%s\n", *cpp[-2] + 4 );  // was ist das? vom ersten array element das letzte zeichen?
       printf("%s\n", *--*++cpp + 6 );  // einmal zurück und dann gleich weider vor? und dann das 6te zeichen?
       printf("%s\n", cpp[-1][-1] + 1);  //lol? ein 2d array?
       printf("%s\n", *(*cpp++ - 1) + 3);  // ka
       printf("%s\n", ++(*++cpp)[-1]);  // ne
    
       return 0;
    }
    

    find ich ganz schön krass, so arbeitet doch wirklich niemand oder?

    die erklärung hat mir da auch nicht grad geholfen 😞

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-124532.html



  • "array von" laesst sich als "pointer auf" lesen.
    "array von string" laesst sich als "pointer auf pointer auf char" lesen.

    so arbeitet wirklich kaum jemand, da geb ich dir recht.
    warum das ganze?



  • weisst du was die letzen printf bedeuten? ich kann zwar sagen was rauskommt ( in der console ausgeben ) aber ich bin mir nicht sicher ob der buchstabe gerade von da kommt oder von einem anderem element 😞



  • die letzten beiden sind zu pervers, um sie oeffentlich preiszugeben. ich koennte die sicherlich mit nem blatt papier und nem stift entziffern, aber ich hab keinen anreiz. biete mir nen gut bezahlten job an, und ich machs.

    edit: hab jetzt mal bock gehabt. hab 16 minuten 25 sekunden gebraucht, in angenehmem tempo. auf anhieb richtig. beweis laesst sich in freenode.net/#d abholen. 27.01.06 22:45:01 GMT+1 war ich fertig.

    edit 2: @op: du musst cpp vor und nach der auswertung des ausdruckes festhalten. von cp solltest du auch die aenderungen mitverfolgen. dann geh mechanisch durch. sieh dir nicht den output des laufenden programmes an. der verwirrt nur.


Anmelden zum Antworten