jak przypisać dwuwymiarową tablicę do ** wskaźnika? to jest pomysł, co chcę zrobić:jak przypisać dwuwymiarową tablicę do ** wskaźnika?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
, więc jakiej pomocy? góry dzięki
jak przypisać dwuwymiarową tablicę do ** wskaźnika? to jest pomysł, co chcę zrobić:jak przypisać dwuwymiarową tablicę do ** wskaźnika?
int arrray [2][3];
int **pointer = array;
so pointer[0][1]= 1;
, więc jakiej pomocy? góry dzięki
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.
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.
Uzgodnione. STL zaoszczędzi wiele bólu głowy. – chris
to nie jest to, co chcę w ll, to jest jednowymiarowa tablica dziękuję u za wysiłek –
@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ć*. –
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 ...... –
@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 –
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 –