[C] Tablica wskaźników na tablice wielowymiarowe.

0

Witam,

chciałbym Was prosić o pomoc w zdefiniowaniu tablicy wskaźników do tablicy wielowymiarowych. Przyznam, że pomimo moich starań nie udaje mi się zdefiniować tej tablicy.

Poniżej przedstawiam jedną z tablic wielowymiarowych:

uint8_t PROGMEM bmp01 [][6] =
{
    {0x00, 0xfe, 0xde, 0xde, 0xee, 0xee},
    {0xee, 0xfe, 0xf6, 0xf6, 0xf6, 0xf6},
    {0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6},
    {0xfe, 0xee, 0xee, 0xde, 0xfe, 0xfc},
    {0xfc, 0xf8, 0xf2, 0xe6, 0x8e, 0x1e},
    {0x7e, 0xfe, 0xfe, 0xfe, 0xfe, 0x80},
    {0x7e, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe},
    {0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x3e},
    {0xc0, 0xfe, 0xfe, 0xfe, 0xfe, 0x7e},

//itd.
}

Jak teraz zdefiniować tablicę w której będę przetrzymywał wskaźniki do wyżej przedstawionej tablicy?

Pozdrawiam serdecznie,
Krzysiek

0
uint8_t **ptab[SIZE];
0

Mam jeszcze jedno pytanie, jak teraz wypełnić tablicę wskaźników **ptab wskaźnikami na tablice wielowymiarowe?

uint8_t **ptab[SIZE] = 
{
        ?????, //bmp01
        ?????, //bmp02

        itd.
};

Przy inicjalizacji typu:

uint8_t **BitmapsPointerTable[NUMBER_OF_BITMAPS] =
{
	bmp01,
	bmp02,
	bmp03,
	bmp04,
	bmp05,
	bmp06
};

Otrzymuję Warningi typu:

bitmaps.h:179: warning: initialization from incompatible pointer type

Dzięki wielkie za odpowiedzi,
Pozdrawiam Krzysiek

0
char PROGMEM bmp01 [][6] = {
    {0x00, 0xfe, 0xde, 0xde, 0xee, 0xee},
    ......
}

jest typu char[][6], przy czym wielkosc jest dobierana automatycznie przez kompilator, np. char[150][6]

dosłownie rozumiejąc, "wskaznik na to" jest typu char (*)[150][6], a zapis z nazwa:

char (*nazwa)[150][6] = &bmp01;

przy czym uwaga, jest to wskaznik na tę zmienna bmp01, a nie na tablicę o którą Ci chodzi, co zreszta widac w kodzie po ampersandzie

wskaznik na ową tablicę ma zaś typ: char (*)[6], czyli po prostu typ mowiaci 'adres elementu tablicy':

char(*nazwa)[6] = bmp01

jesli teraz chcesz miec tablice takich wskaznikow, bedzie to:

char(*nazwa[])[6] = { bmp01, bmp02, bmp03 }

i bedzie mialo w tym przykladzie typ: char([3])[6] -- tablica trzech elementow typu char()[6] (wsk-na-tablice)

i wlasnie dlatego kompilator krzyczy przy probie uzycia winterfresh'owej x**[], poniewaz taka deklaracja twierdzi ze typ elementu to x** (wsk-na-wsk) a nie (wsk-na-tab)

c++ jest dokladny w tej kwestii i jest to ERROR nie WARNING

char bmp01 [][6] =
{
    {0x00, 0xfe, 0xde, 0xde, 0xee, 0xee},
    {0xee, 0xfe, 0xf6, 0xf6, 0xf6, 0xf6},
    {0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6},
    ...i jeszcze 6, razem 9
};
char bmp02 [][6] =
{
    {0x00, 0xfe, 0xde, 0xde, 0xee, 0xee},
    {0xee, 0xfe, 0xf6, 0xf6, 0xf6, 0xf6},
    {0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6},
    ..i jeszcze 2, razem 5
};

char (*nazwa1[])[6] = { bmp01, bmp02 }; // OK
char** nazwa2[] = { bmp01, bmp02 }; // ERROR: 

error C2440: 'initializing' : cannot convert from 'char [9][6]' to 'char **'
error C2440: 'initializing' : cannot convert from 'char [5][6]' to 'char **'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast</cpp>

0

Dzięki za obszerną odpowiedź, teraz rozumiem o co chodzi ;-)

Pozdrawiam Krzysiek

1 użytkowników online, w tym zalogowanych: 0, gości: 1