Przesyłanie tablicy dwuwymiarowej do funkcji
Ostatnio zmodyfikowano 2010-06-01 22:57
poiuytrewqlkjhgfdsam Temat założony przez niniejszego użytkownika |
Przesyłanie tablicy dwuwymiarowej do funkcji » 2010-06-01 10:56:27 Witam. Jak przekazać tablice dwuwymiarową do funkcij? np mam sobie w pliku hppw pliku cppint foo[ 2 ][ 2 ]; wczytaj( foo[][] );
Jak to zrobić, bo to co podałem wyżej nie działa. |
|
Dragonit |
» 2010-06-01 13:40:17 #include <cstdlib> #include <iostream>
using namespace std;
void wczytaj( int marchewa[ 10 ][ 10 ] ) { }
int main( int argc, char * argv[] ) { int foo[ 10 ][ 10 ]; wczytaj( foo ); system( "PAUSE" ); return EXIT_SUCCESS; } ZOBACZ CZY TAK DA RADE |
|
poiuytrewqlkjhgfdsam Temat założony przez niniejszego użytkownika |
» 2010-06-01 13:59:10 No dobra. Ale ja nie ma z góry założone jaki rozmiar bedzie miała tablica. A w twoim przypadku rozmiar tablicy musi być stały. |
|
Dragonit |
» 2010-06-01 14:02:29 to musisz użyć tablicy dynamicznej Tak sie ją tworzy: int * tab, n; cout << "Podaj rozmiar tablicy" << endl;
cin >> n;
tablica = new int[ n ];
......
.......
........
delete[] tab;
|
|
michalp |
» 2010-06-01 14:10:49 void wczytaj( int[][] ) A przeczytałeś jaki error rzuca kompilator? error: multidimensional array must have bounds for all dimensions except the first |
@Dragonit: Niestety nie zrozumiałeś o co mu chodzi. Co do rozwiązania problemu, to albo zrób to tak jak można: void wczytaj( int a[][ 10 ] ) albo użyj std::vector, albo stwórz sobie szablon: template < class Tab > void wczytaj( Tab a ) |
|
Dragonit |
» 2010-06-01 14:37:59 #include <cstdlib> #include <iostream>
using namespace std;
void wczytaj( int x, int y ) { int tablica[ x ][ y ]; }
int main( int argc, char * argv[] ) { int foo1, foo2; int foo[ foo1 = 2 ][ foo2 = 2 ]; wczytaj( foo1, foo2 ); system( "PAUSE" ); return EXIT_SUCCESS; } Teraz masz ze zmiana rozmiaru tablic. Troche to dziwne ale dziala. |
|
DejaVu |
» 2010-06-01 20:50:13 Musisz przekazać wskaźnik na tablicę oraz określić ile elementów posiada każdy z wymiarów. Nie da się dostać do konkretnej komórki tablicy kilku wymiarowej nie znając rozmiaru każdego z wymiaru.
Pamięć komputera jest płaska (liniowa). Każda komórka ma swój adres, a więc nawet tablica wielowymiarowa jest interpretowana jako linia, więc stosowane są wzory typu: y*sizeX+x.
Skoro sizeX jest nieznany to nie da się określić komórki, która powinna zostać zwrócona.
/edit: @up: Twoje rozwiązanie jest błędne. @down: To się nawet nie skompiluje :) |
|
Dragonit |
» 2010-06-01 21:33:20 Dzieki za info. Myslalem ze to na górze moze byc bo sie nie wywala przy kompilacji, ale czy dziala dobrze, najwidoczniej nie.
@up: Musze cię poinformować ze w devCpp się skompilowało bez zarzutów. |
|
« 1 » 2 |