mateuszq Temat założony przez niniejszego użytkownika |
Wskaźniki z dwoma gwiazdkami » 2014-03-10 18:18:50 Witam, Poniżej wrzucam program na dodawanie macierzy. Mam problem z jego zrozumieniem a mianowicie chodzi mi o deklaracje zmiennych **A **B i **C rozumiem, że są to wskaźniki (gdzies znalazlem ze wskaźnik do wskaźnika) ale o co chodzi z tym chodzi w czym to nam pomaga? Szukałem sporo w internecie ale nic satysfakcjonującego nie znalazłem w książkach również za dużo na ten temat nie ma. Proszę o jakies jasne wytlumaczenie tego problemu. #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h>
using namespace std;
int main() { int ** A, ** B, ** C, n, m, iw, ik; srand(( unsigned ) time( NULL ) ); m = rand() % 5 + 2; n = rand() % 5 + 2; A = new int *[ m ]; B = new int *[ m ]; C = new int *[ m ]; for( iw = 0; iw < m; iw++ ) { A[ iw ] = new int[ n ]; B[ iw ] = new int[ n ]; C[ iw ] = new int[ n ]; } for( iw = 0; iw < m; iw++ ) for( ik = 0; ik < n; ik++ ) { A[ iw ][ ik ] = rand() % 100; B[ iw ][ ik ] = rand() % 100; } cout << "m = " << m << endl << "n = " << n << endl << endl << "Matrix A:" << endl; for( iw = 0; iw < m; iw++ ) { for( ik = 0; ik < n; ik++ ) cout << setw( 5 ) << A[ iw ][ ik ]; cout << endl; } cout << endl << "Matrix B:" << endl; for( iw = 0; iw < m; iw++ ) { for( ik = 0; ik < n; ik++ ) cout << setw( 5 ) << B[ iw ][ ik ]; cout << endl; } for( iw = 0; iw < m; iw++ ) for( ik = 0; ik < n; ik++ ) C[ iw ][ ik ] = A[ iw ][ ik ] + B[ iw ][ ik ]; cout << endl << "Matrix C = A + B:" << endl; for( iw = 0; iw < m; iw++ ) { for( ik = 0; ik < n; ik++ ) cout << setw( 5 ) << C[ iw ][ ik ]; cout << endl; } for( iw = 0; iw < m; iw++ ) { delete[] A[ iw ]; delete[] B[ iw ]; delete[] C[ iw ]; } delete[] A; delete[] B; delete[] C; return 0; }
|
|
pekfos |
» 2014-03-10 18:30:09 To wskaźnik na wskaźnik. |
|
mateuszq Temat założony przez niniejszego użytkownika |
» 2014-03-10 18:38:46 To juz sam wywnioskowałem o czym napisalem w powyższym poscie. Chodzi mi bardziej to dlaczego został zastosowany w tym programie, co miało na celu użycie podwojnego wskaznika? Domyslam sie że ma to cos wspolnego z dwuelementową tablicą, czy chodzi tu o to, że ze względu na to że nie możemy utworzyc dynamicznej tablicy bez podania wartosci drugiego elementu? |
|
pekfos |
» 2014-03-10 18:49:00 ?
Widać w kodzie, po co to jest użyte. Alokujesz m wskaźników i do każdego n elementów, czyli dynamicznie alokowaną tablicę dwuwymiarową. Co tu niejasnego? |
|
mateuszq Temat założony przez niniejszego użytkownika |
» 2014-03-10 19:01:09 jestem jeszcze początkujący więc moze poprostu mam problem ze zrozumieniem tego. Czy analogicznie moge robic z tablicami wielowymiarowymi? dac np ***A? Dziwi mnie to, że w ksiązkach nie ma nic na ten temat. |
|
pekfos |
» 2014-03-10 19:09:28 Można. |
|
mateuszq Temat założony przez niniejszego użytkownika |
» 2014-03-11 11:40:42 Napisalem funkcje która tworzy macierz nxn, w jaki sposob zwrocic ten podwojny wskaznik? zrobilem w ten sposob ale jest to błędne. #include<iostream> #include<cstdlib> #include<conio.h> #include<ctime>
using namespace std;
int ** generuj( int & n ) { cout << "podaj stopien macierzy: "; cin >> n; int *( * tab ); tab = new int *[ n ]; for( int k = 0; k < n; k++ ) { tab[ k ] = new int[ n ]; } for( int i = 0; i < n; i++ ) { for( int j = 0; j < n; j++ ) { tab[ i ][ j ] = rand() % 100; } } return tab; }
int main() { int n = 0; int *( * m1 ); ** m1 = generuj( n ); _getch(); return 0; }
|
|
mateuszq Temat założony przez niniejszego użytkownika |
» 2014-03-11 12:36:03 Udało mi sie to zrobić w taki sposób, czy jest to prawidłowe? #include<iostream> #include<cstdlib> #include<conio.h> #include<ctime>
using namespace std;
int ** generuj( int & n ) { cout << "podaj stopien macierzy: "; cin >> n; int *( * tab ); tab = new int *[ n ]; for( int k = 0; k < n; k++ ) { tab[ k ] = new int[ n ]; } for( int i = 0; i < n; i++ ) { for( int j = 0; j < n; j++ ) { tab[ i ][ j ] = rand() % 100; } } return tab; }
void wypisz( int n, int ** tab ) { for( int i = 0; i < n; i++ ) { cout << endl; for( int j = 0; j < n; j++ ) { cout << tab[ i ][ j ] << " "; } } }
int main() { int n = 0; int *( * m1 ); m1 = generuj( n ); wypisz( n, m1 ); _getch(); return 0; }
|
|
« 1 » 2 3 |