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 ){