Pointer Problem



  • Hi!
    Warum bekomme ich bei folgendem Code:

    struct Snake {
        int parts[50][2];
        int headpos[2];
        int direction;
    };
    
    int get_length( struct Snake *sp ){
        int *ip;
    
        int counter = 0;
        for( ip = sp->&parts[0]; ip < sp->&parts[50]; ip++ ){
            if( *ip[0] < WIDTH && *ip[1] < HEIGHT ){
                counter++;
            }
        }
        return counter;
    

    für die Zeile

    for( ip = sp->&parts[0]; ip < sp->&parts[50]; ip++ ){
    

    die Fehler:

    error: syntax error before '&' token
    error: syntax error before '&' token
    error: syntax error before ')' token
    

    Wo ist der Syntax Error?
    Ich bin noch neu in dieser Sprache...

    MfG ::john:: 🙂
    PS: Bald :xmas1: + :xmas2:



  • Sorry WIDTH & HEIGHT vergessen:

    #define WIDTH 80
    #define HEIGHT 24
    

    MfG ::john::



  • Ein & gleich nach einem -> ist einfach nicht erlaubt (würde aber auch keinen Sinn ergeben).
    sp ist ein Zeiger auf struct Snake,
    sp->parts oder &sp->parts[0] ist ein Zeiger auf den Anfang des Arrays,
    sp->parts + n oder &sp->parts[n] ist ein Zeiger auf das n-te Element des Arrays.

    Irgendetwas davon hast du sicher gemeint.



  • Die Zeile passt schonmal danke!
    Jetzt zu der Zeile darunter noch eine Frage:

    if( *ip[0] < WIDTH && *ip[1] < HEIGHT ){
    

    So wie es aktuell in der Zeile steht scheint es nicht zu funktionieren,
    aber wie dann?
    mit *ip greife ich doch auf die "obere Schicht" des Arrays zu, aber wie
    komme ich dann an die untere?

    MfG ::john::



  • if( *ip[0] < WIDTH && *ip[1] < HEIGHT ){
    

    In den [] steckt schon ein unstichtbarer *:

    ip[2]        // ist das gleiche wie
    *(ip + 2)
    

    Deshalb:

    *ip[0]       // ist das gleiche wie
    *(*(ip + 0)) // ist das gleiche wie
    **ip
    

    Und da ist ein * zuviel. Lass in der Zeile einfach die Sterne weg:

    if( ip[0] < WIDTH && ip[1] < HEIGHT ){
    

    Oder lass die eckigen Klammern weg:

    if( *ip < WIDTH && *(ip + 1) < HEIGHT ){
    

Anmelden zum Antworten