Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesyłanie tablicy dwuwymiarowej do funkcji

Ostatnio zmodyfikowano 2010-06-01 22:57
Autor Wiadomość
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 hpp
C/C++
void wczytaj( int[][] )
w pliku cpp
C/C++
int foo[ 2 ][ 2 ];
wczytaj( foo[][] ); //chce wczytać całą tablice

Jak to zrobić, bo to co podałem wyżej nie działa.
P-17409
Dragonit
» 2010-06-01 13:40:17
C/C++
#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
P-17411
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.
P-17412
Dragonit
» 2010-06-01 14:02:29
to musisz użyć tablicy dynamicznej

Tak sie ją tworzy:
C/C++
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ęć)
P-17413
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:
C/C++
template < class Tab >
void wczytaj( Tab a )
P-17414
Dragonit
» 2010-06-01 14:37:59
C/C++
#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.
P-17415
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 :)
P-17433
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.
P-17439
« 1 » 2
  Strona 1 z 2 Następna strona