Potrzebuję napisać funkcję, która odbierze tablicę wielowymiarową. Wiem jak to się robi zarówno przy odbieraniu jako tablicy czy jako wskaźnika. Ale zobaczyłem przypadkiem, że w Symfonii C++ jest napisane:
Jak to nie - przecież jak mamy:
int tabl[4][8][10];funkcja(tabl); [/code]
To deklaracja tej funkcji musi wyglądać tak:
[code=php]void funkcja(int (*wsk)[8][10]);
Tylko pierwszy wymiar nigdy nie jest zaszyty - reszta musi być przecież.
Czyli błąd w książce :?:
int tab1[4][8][10];int tab2[10][8][4];void funkcja(int *wsk,unsigned Z,unsigned Y,unsigned X) { for(unsigned z=0;zZ;++z) for(unsigned y=0;yY;++y) for(unsigned x=0;xX;++x) cout"tabl["z"]["y"]["x"]="*(wsk++)endl; }funkcja((int*)tab1,4,8,10); // tylko w niektórych kompilatorach konieczna jest ta konwersjafunkcja(tab2,10,8,4); // większość przyjmie bezpośrednio [/code]
Ale minusem takiej konstrukcji będzie to że w funkcji nie będziemy mogli posługiwać się nawiasami kwadratowymi przy wskaźniku, tylko będziemy musieli sami przeprowadzać to liczenie adresu danego elementu (będziemy musieli pisać to, na co kompilator zamieni wyrażenie tablica[a][c]).