Pointer auf zweidimensionales Array

Gast #2000481
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
Gast #2000487
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.
#2000503
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren