Frish Temat założony przez niniejszego użytkownika |
[C++]Tablice dwuwymiarowe - wskaźniki do elementów tych tablic. » 2015-08-27 20:58:50 Witam mam taki krótki kod i chciałbym się dowiedzieć jak mogę korzystać z tablic dwuwymiarowych za pomocą wskaźników. Niestety coś robię nie tak i nie potrafię sobie z tym poradzić. Proszę o pomoc. #include <iostream>
int main() { int tab_w[ 3 ][ 5 ] = { { 2, 4, 8, 16, 32 }, { 3, 6, 12, 24, 48 }, { 5, 10, 20, 40, 80 } }; int * wsk_tab_w = tab_w[ 0 ]; int ** wsk_wsk_w = & wsk_tab_w; std::cout << "tab_w: " << tab_w[ 0 ][ 0 ] << std::endl; std::cout << "wsk_tab_w: " << *( wsk_tab_w + 6 ) << std::endl; std::cout << "wsk_wsk_w: " << *( *( wsk_wsk_w + 1 ) + 1 ) << std::endl << std::endl; }
...i ostatni wiersz tego programu, czyli std::cout << "wsk_wsk_w: " << *( *( wsk_wsk_w + 1 ) + 1 ) << std::endl << std::endl;
...nie pokazuje na element tab_w[1][1]...nie wiem gdzie popełniam błąd, widocznie nie rozumiem tego. Proszę o wskazanie właściwego toku myślenia. |
|
Cansisti |
» 2015-08-27 21:24:40 Nazwa tablicy jest już wskaźnikiem. A tablica[n] jest jakby wskaźnikiem na n-ty element. Słowem jeżeli chcesz żeby funkcja/metoda operowała na orginalnej tablicy (bo po co innego wskaźniki?) wystarczy przekazać jej nazwę. |
|
carlosmay |
» 2015-08-27 21:32:22 int t[ 3 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int * p; p = & t[ 0 ][ 0 ]; cout << *(( p + 2 ) + 3 ) << endl;
Masz taką potrzebę mieć wskaźnik do wskaźnika? Wystarczy tak? |
|
Cansisti |
» 2015-08-27 21:48:55 @up Chyba nie działa: int tab[ 3 ][ 5 ] = { { 2, 4, 8, 16, 32 }, { 3, 6, 12, 24, 48 }, { 5, 10, 20, 40, 80 } }; int * p; p = & tab[ 0 ][ 0 ];
cout << *(( p + 2 ) + 5 );
Output: 12. Bo *(( p + 2 ) + 5 ) wskazuje po prostu na 7 pozycję. (Specjalnie dałem 5 co powinno wyjść poza zakres tablicy ale jak się okazuje tego nie robi...). Czyli żeby odwołać się do elementu np [2][3] trzeba napisać *(p + 2*5 + 3 ). |
|
carlosmay |
» 2015-08-27 22:07:09 cout << *(( p + 1 * 3 ) + 2 ) << endl; zapomniałem o mnożeniu przez szerokość tablicy przy przechodzeniu do następnych wierszy. Przepraszam za wprowadzenie w błąd. |
|
Monika90 |
» 2015-08-27 22:36:09 Bo *(( p + 2 ) + 5 ) wskazuje po prostu na 7 pozycję. |
Nie ma siódmej pozycji, tablica ma tylko 5 elementów. |
|
Frish Temat założony przez niniejszego użytkownika |
» 2015-08-28 00:25:06 To znaczy może nie mam takiej potrzeby tworzyć wskaźnik do wskaźnika ale chciałbym zrozumieć to jeżeli jest taka możliwość i jeżeli jest możliwe aby w taki sposób posługiwać się tablicami złożonymi to chciałem zobaczyć i zrozumieć jak to funkcjonuje. Dlatego też prosiłem o pomoc.:) |
|
Frish Temat założony przez niniejszego użytkownika |
» 2015-08-28 00:46:27 Czyli rozumiem z udzielonej pomocy że dostęp przez wskaźniki do rzeczonego elementu tablicy dwuwymiarowej będzie wyglądał w ten sposób? #include <iostream>
int main( void ) { int tab_w[ 3 ][ 5 ] = { { 2, 4, 8, 16, 32 }, { 3, 6, 12, 24, 48 }, { 5, 10, 20, 40, 80 } }; int * wsk_tab_w = tab_w[ 0 ]; int ** wsk_wsk_w = & wsk_tab_w; std::cout << "tab_w: " << tab_w[ 0 ][ 0 ] << std::endl; std::cout << "wsk_tab_w: " << *( wsk_tab_w + 2 ) << std::endl; std::cout << "wsk_wsk_w: " << *(( * wsk_wsk_w + 2 * 5 ) + 1 ) << std::endl << std::endl; }
w tym momencie jak opis wskazuje, prawidłowo wyłuskam element tab_w[3][2]?i jest to dopiero teraz właściwe i poprawnie skonstruowane? |
|
« 1 » 2 |