Data: 2010-06-01 10:56:27
poiuytrewq lkjhgfdsa mnbvcxz | Przesyłanie tablicy dwuwymiarowej do funkcji
Witam. Jak przekazać tablice dwuwymiarową do funkcij? np mam sobie w pliku hpp
void wczytaj(int [][])
w pliku cpp
int foo[2][2]; wczytaj(foo[][]);//chce wczytać całą tablice
Jak to zrobić, bo to co podałem wyżej nie działa.
| Data: 2010-06-01 13:40:17
Dragonit |
#include <cstdlib> #include <iostream>
using namespace std;
void wczytaj(int marchewa[10][10]) { // instrukcje }
int main(int argc, char *argv[]) { int foo[10][10];
wczytaj(foo); //chce wczytać całą tablice
system("PAUSE"); return EXIT_SUCCESS; } ZOBACZ CZY TAK DA RADE | Data: 2010-06-01 13:59:10
poiuytrewq lkjhgfdsa mnbvcxz |
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. | Data: 2010-06-01 14:02:29
Dragonit |
to musisz użyć tablicy dynamicznej
Tak sie ją tworzy: int *tab, n; cout<<"Podaj rozmiar tablicy"<<endl;
cin>>n;
tablica = new int [n]; //podajemy typ elementu i jego rozmiar
......
.......
........
delete[] tab; //kasujemy tablicę, jeśli jest niepotrzebna (zwalniamy pamięć)
| Data: 2010-06-01 14:10:49
michalp |
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) | Data: 2010-06-01 14:37:59
Dragonit |
#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. | Data: 2010-06-01 20:50:13
Piotr Szawdyński |
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  | Data: 2010-06-01 21:33:20
Dragonit |
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. | |
| Statystyki tematu | Ostatnio przeczytali |
|---|
| Czytało użytkowników: | 19 | Dragonit, jacek_k, szyx_yankez, birkofm, SeaMonster131, lenrokskate, Iname (√ιק), pixelmaster, michalp, TheLukon, madmike44, Patzick, Pirotechnik, Piotr Szawdyński, malan | | Przeczytało użytkowników: | 15 | | Czytało osób ogólnie: | 56 | | Przeczytało osób ogólnie: | 45 |
| Ostatnia Aktualizacja| 2010-09-01 19:27:34 (6 dni temu) | |
| Ostatnio aktywni |
|---|
| fish13 | 3 godz | | wiewiorka | 9 godz | | Koni | 9 godz | | BuZuz | 9 godz | | Prezmen | 12 godz | | trupank | 12 godz | | szczgl | 14 godz | | filipesq | 14 godz | | KRIIS551 | 15 godz | | kuba1817 | 16 godz | | extra2 | 17 godz | | pixelmaster | 18 godz |
|