2012-04-15 25 views

Odpowiedz

6

Prosta odpowiedź brzmi, że nie możesz. Tablica dwuwymiarowa jest ciągłym blokiem pamięci, który przechowuje każdą linię, podczas gdy wskaźnik do wskaźnika może odnosić się do lokalizacji pamięci, w której znajduje się wskaźnik do innej lokalizacji pamięci zawierającej liczby całkowite. Z drugiej strony można utworzyć osobną strukturę danych, która zawiera wskaźniki do elementów w żądany sposób (np. Utworzyć tablicę wskaźników, zainicjować te wskaźniki na początku każdego wiersza i użyć wskaźnika do ta tablica wskaźników jako pointer), ale nie jest w ogóle użyteczna, ale raczej komplikuje wszystko nieświadomie.

Pytanie prawdopodobnie wynika z powszechnych nieporozumień, że tablice i wskaźniki są same, które nie są. Tablica może rozpaść się na wskaźnik do pierwszego elementu tablicy (i będzie to robić dość często), ale typ tego wskaźnika jest typem pierwszego elementu. W tablicy dwuwymiarowej typem pierwszego elementu jest tablica wewnętrzna, a nie podstawowy typ elementu.

+0

ok bardzo dziękuję, wiem, że sama tablica jest wskaźnikiem na przykład arr [2] można sobie z tym poradzić jak * arr * (arr + 1) = 3 jak mogę zrobić to samo, ale z dwuwymiarową tablicą? Arr [3] [2], czy mogę powiedzieć ** arr = 0 itd ...... –

+0

@AhmedZainElDein: NIE, jesteś w błędzie i jest to powszechne nieporozumienie. Tablica jest ** nie ** wskaźnikiem do pierwszego elementu, są one całkowicie różnymi typami, nawet jeśli istnieje niejawna konwersja z tablicy do wskaźnika do pierwszego elementu. Kiedy naprawdę zrozumiesz, że nie są * tą samą rzeczą, łatwiej będzie zrozumieć, dlaczego nie możesz zrobić tego, o co prosisz. Innym sposobem na obejrzenie tego jest narysowanie układu pamięci macierzy dwuwymiarowej (pojedynczego bloku o rozmiarach N * M elementów), a następnie zorientowanie się, że wewnątrz tego bloku nie ma wskaźnika, więc nie można utworzyć do niego wskaźnika –

+0

dziękuję za oświecenie ja.Jestem bardziej skłonny do tego, co mówisz, ponieważ nie mogę znaleźć, aby ** arr odwołać się do arr [3] [2] w ogóle ale to sprawia, że ​​zadaję kolejne pytanie, co w jednowymiarowej tablicy działa int arr [2], mogę powiedzieć * arr = 0; * (arr + 1) = 3 –

16

stwierdzenie wskaźnik tak:

int (*pointer)[3] = array; 

Ale to nieskończenie paskudny w C++. Być może uda ci się znaleźć lepsze rozwiązanie (z wykorzystaniem wektorów i innych), jeśli wyjaśnisz, jaki jest Twój ogólny cel.

+0

Uzgodnione. STL zaoszczędzi wiele bólu głowy. – chris

+0

to nie jest to, co chcę w ll, to jest jednowymiarowa tablica dziękuję u za wysiłek –

+0

@AhmedZainElDein: czego nie można zrobić, i jest to podejście, aby zapewnić coś, co będzie * źródło * zgodne z tym, co ty *chcieć*. –

Powiązane problemy