Forum: Compiler & IDEs Pointer auf zweidimensionales Array


von Michael (Gast)


Lesenswert?

Mahlzeit,

ich stehe hier auf dem Schlauch, wie ich die Warnings:
1
7: warning: initialization from incompatible pointer type

bei dieser Initialisierung:
1
6: char display_buffer[DISPLAY_LINE_WIDTH][DISPLAY_MAX_Y];
2
7: char (* const display_buffer_2d)[DISPLAY_LINE_WIDTH] = &(display_buffer[0][0]);
3
8: char * const display_buffer_1d = &display_buffer[0][0];

und:
1
108: warning: array subscript has type 'char'

bei der Zuweisung:
1
108:  display_buffer_2d[x>>3][y] |= (1 << (x&7));

vermeide.

Bitte gebt mir mal einen Tipp, wie ich casten muss, dass die Warnings 
verschwinden.

Gruß Michi

von Peter (Gast)


Lesenswert?

Michael schrieb:
> 7: char (* const display_buffer_2d)[DISPLAY_LINE_WIDTH] = 
&(display_buffer[0][0]);

was willst du eigentlich mit dieser Anweisung ereichen? willst du ein 
array von Zeigern anlegen?

Das ganze geht bestimmt auch wesentlich lesbarer, aber dafür müsste man 
den Sinn verstehen.

von Rolf M. (rmagnus)


Lesenswert?

Michael schrieb:
> Mahlzeit,
>
> ich stehe hier auf dem Schlauch, wie ich die Warnings:
> 7: warning: initialization from incompatible pointer type
>
> bei dieser Initialisierung:
> 6: char display_buffer[DISPLAY_LINE_WIDTH][DISPLAY_MAX_Y];
> 7: char (* const display_buffer_2d)[DISPLAY_LINE_WIDTH] =
> &(display_buffer[0][0]);

Du definierst hier einen konstanten Zeiger auf ein Array aus 
DISPLAY_MAX_Y char. &display_buffer[0][0] ist ein Zeiger auf char. Das 
paßt nicht zusammen.

> 8: char * const display_buffer_1d = &display_buffer[0][0];
>
> und:
> 108: warning: array subscript has type 'char'
>
> bei der Zuweisung:
> 108:  display_buffer_2d[x>>3][y] |= (1 << (x&7));

Da wird wohl x und/oder y vom Typ char sein, was für einen Array-Index 
eher ungewöhnlich ist, da dieser Typ eigentlich für Text gedacht ist.

> vermeide.
>
> Bitte gebt mir mal einen Tipp, wie ich casten muss, dass die Warnings
> verschwinden.

Mit Casts könntest du die Warnungen sicher wegbekommen, aber nicht die 
Fehler im Code, die zu diesen Warnungen führen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.