emSon Temat założony przez niniejszego użytkownika |
[C++] Przesyłanie do funkcji tablicy dwuwymiarowej o nieznanej wartości » 2015-11-13 18:45:28 Cześć. Mam taki prototyp: int policzSumeWartosciWTablicy( int( * )[ 5 ], int );
Funkcja ta liczy sumę elementów zawartych w tablicy dwuwymiarowej o indeksie drugim '5'. Czy da się zrobić tak, aby liczba ta była wyznaczana przez zmienną? W przypadku usunięcia tej liczby jest taki błąd: D:\C++\TEST\main.cpp|6|error: parameter '<anonymous>' includes pointer to array of unknown bound 'int []'|
|
|
1aam2am1 |
» 2015-11-13 18:58:11 Tak możesz zrobić wskaźnik na zwykłą tablice (int*) i przekazywać ile jest wierszy i kolumn w tejże tablicy. |
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-11-13 19:04:43 Możesz podać przykład?
|
|
Monika90 |
» 2015-11-13 19:37:12 Oto przykład void f( int * data, int width, int height ) { }
int main() { int w = 100; int h = 200; std::vector < int > v( w * h ); f( v.data(), w, h ); }
ale w pełni poprawnym sposobem byłoby zdefiniowanie klasy Array, albo użycie jakiejś już istniejącej np. z biblioteki boost |
|
j23 |
» 2015-11-13 20:18:26 Można też tak, jeśli tworzysz tablice wielowymiarowe w sposób, nazwijmy to, klasyczny: template < int cols > int policzSumeWartosciWTablicy( int tab[][ cols ], unsigned rows ) { cout << "tab[" << rows << ", " << cols << "]\n"; return 0; }
int tab1[ 10 ][ 5 ]; int tab2[ 100 ][ 6 ]; auto tab3 = new int[ 1 ][ 666 ];
policzSumeWartosciWTablicy( tab1, 10 ); policzSumeWartosciWTablicy( tab2, 100 ); policzSumeWartosciWTablicy( tab3, 1 ); |
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-11-13 22:10:22 Wykombinowałem coś takiego, może być? #include <iostream> #include <windows.h> #include <ctime>
using namespace std;
void zapelnijTablice( int ** tablica, int iloscWierszy, int iloscKolumn );
int main() { int iloscWierszy, iloscKolumn; cout << "Ile wierszy ma miec twoja tablica: __\b\b"; cin >> iloscWierszy; cout << "Ile kolumn ma miec twoja tablica: __\b\b"; cin >> iloscKolumn; int ** tablica = new int *[ iloscWierszy ]; for( int i = 0; i < iloscWierszy; i++ ) { tablica[ i ] = new int[ iloscKolumn ]; } zapelnijTablice( tablica, iloscWierszy, iloscKolumn ); cout << tablica[ 2 ][ 2 ]; for( int i = 0; i < iloscWierszy; i++ ) { delete[] tablica[ i ]; } delete tablica; }
void zapelnijTablice( int ** tablica, int iloscWierszy, int iloscKolumn ) { srand( time( NULL ) ); int liczbaLosowa; for( int i = 0; i < iloscWierszy; i++ ) { for( int j = 0; j < iloscKolumn; j++ ) { liczbaLosowa = rand() % 100 + 1; tablica[ i ][ j ] = liczbaLosowa; cout << i << ", " << j << ": " << tablica[ i ][ j ] << endl; } } }
|
|
carlosmay |
» 2015-11-13 23:02:40 zwalniasz tylko pamięć pierwszego elementu tablic. Wskaźnik możesz dla bezpieczeństwa uczynić pustym. tablica = NULL; |
|
emSon Temat założony przez niniejszego użytkownika |
» 2015-11-14 08:36:57 Dzięki wam ;) |
|
« 1 » |