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

Dynamiczna tablica dwu wymiarowa c++

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
116 wizyt
pytanie zadane 10 listopada 2017 w C i C++ przez Jakub 0 Mądrala (6,600 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,210 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 Mądrala (6,600 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 78 wizyt
pytanie zadane 17 października 2015 w C i C++ przez Jonbi2 Dyskutant (8,280 p.)
0 głosów
1 odpowiedź 61 wizyt
pytanie zadane 19 listopada 2017 w C i C++ przez krystian1997 Początkujący (340 p.)
0 głosów
2 odpowiedzi 64 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.
Ciekawy innych porad? Odwiedź tę stronę!

44,251 zapytań

84,047 odpowiedzi

167,337 komentarzy

21,161 pasjonatów

Przeglądających: 182
Pasjonatów: 6 Gości: 176

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...