• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna tablica dwu wymiarowa c++

Object Storage Arubacloud
0 głosów
762 wizyt
pytanie zadane 10 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

Hej, mam bardzo krótkie pytanie, ale może najpierw podam kod:

int **arr = new int*[3]; //tworzenie tablicy dwo wymiarowej
	arr[0] = new int[3];
	arr[1] = new int[3];
	arr[2] = new int[3];

	int c = 1;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) { //tu jest jak najbarziej ok
			arr[i][j] = c;
			cout << arr[i][j];
			c++;
		}
		cout << endl;
	}

	cout << endl << endl;

	for (int i = 0; i < 3; i++) { //teraz chce zrobic tym sposobem i aplikacja sie rozwala 
		for (int j = 0; j < 3; j++) {
			cout << **arr;
			*arr++;
		}
		arr++;
		cout << endl;
	}

	delete arr[0];
	delete arr[1];
	delete arr[2];

	delete arr;

Myślę że kodu więcej tłumaczyć nie muszę bo raczej każdy (prócz mnie) rozum ie działanie dynamicznych tablic 2D :). W drugiej pętli zamiast po prostu dawać arr[i][j] to chcę to zrobić w 100% na wskaźnikach. Dziękuje bardzo za pomoc i pozdrawiam

*Co prawda już wiem czemu to jest wadliwe, nie zeruje *arr (nie wiem jak to zrobić). Taki kod też nie chodzi:

for (int i = 0; i < 3; i++) {
		cout << **arr;
		arr++;
	}

 

1 odpowiedź

+1 głos
odpowiedź 10 listopada 2017 przez Dexterim Dyskutant (8,370 p.)
wybrane 10 listopada 2017 przez Jakub 0
 
Najlepsza

Nie widzę sensu zabawy z takimi wskaźnikami. Zauważ, że na końcu nie zwalniasz tak naprawdę pamięci którą wcześniej zaalokowałej. Ponieważ przechodząc po pętli 

for (int i = 0; i < 3; i++) { //teraz chce zrobic tym sposobem i aplikacja sie rozwala 
        for (int j = 0; j < 3; j++) {
            cout << **arr;
            *arr++;
        }
        arr++;
        cout << endl;
    }

twoje arr nie wskazuje na początek tablicy a na koniec i idąc dalej *arr tak samo. Jeśli byś chciał się bawić to ewentualnie cos takiego *(*(arr+i)+j) (nie sprawdzałem ale wydaje mi się ze powinno działać. 

I tak ogolnie zabawę z dynamicznym alkowaniem lepiej zostawić bibliotece STL i skorzystać m.in. z std::vector

komentarz 10 listopada 2017 przez Jakub 0 Pasjonat (23,120 p.)

Racja, też mi się nie uśmiecha zabawa z czymś takim ale chyba muszę wiedzieć jak to zrobić /: . W ogóle nie nawidzę takiego stylo obsługi tablic i uczę się tego tylko dlatego żę wypada to umieć...

 

* ten zapis:  *(*(arr+i)+j)  już całkowicie mnie rozwala :O

 

Podobne pytania

0 głosów
2 odpowiedzi 153 wizyt
pytanie zadane 17 października 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 188 wizyt
0 głosów
1 odpowiedź 238 wizyt
pytanie zadane 21 sierpnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...