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

Dynamiczna tablica dwu wymiarowa c++

Staż IT w Comarch
0 głosów
187 wizyt
pytanie zadane 10 listopada 2017 w C i C++ przez Jakub 0 Dyskutant (8,370 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,410 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 Dyskutant (8,370 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 80 wizyt
pytanie zadane 17 października 2015 w C i C++ przez Jonbi2 Dyskutant (8,260 p.)
0 głosów
1 odpowiedź 68 wizyt
pytanie zadane 19 listopada 2017 w C i C++ przez krystian1997 Początkujący (340 p.)
0 głosów
2 odpowiedzi 68 wizyt
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.
Ciekawy innych porad? Odwiedź tę stronę!

48,396 zapytań

89,943 odpowiedzi

181,000 komentarzy

23,398 pasjonatów

Przeglądających: 181
Pasjonatów: 12 Gości: 169

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.

...