Dlaczego podczas pracy z tablicami dwuwymiarowymi ważny jest tylko drugi wymiar kompilatora? Po prostu nie mogę tego zrozumieć. DziękiDlaczego ważny jest tylko drugi wymiar tablicy?
Odpowiedz
Ponieważ kompilator musi dowiedzieć się, jak uzyskać dostęp do danych z pamięci. Pierwszy wymiar nie jest ważny, ponieważ kompilator może policzyć liczbę elementów, gdy podane są wszystkie inne rozmiary.
Przykłady:
int a1[] = { 1, 2, 3, 4 }
kompilator wie przeznaczyć przestrzeń dla 4 liczb całkowitych. Teraz, z tym:
int a2[][] = { 1, 2, 3, 4, 5, 6} }
kompilator nie może zdecydować, czy powinien być A2 [1] [6] lub A2 [2], [3], lub a2, [3], [2] lub A2 [6] [1] . Gdy powiesz mu drugi wymiar, może obliczyć pierwszy.
Na przykład próba dostępu do elementu a2 [1] [0] może przynieść różne wartości w zależności od deklaracji. Możesz uzyskać 2, 3, 4 lub nawet nieprawidłową pozycję.
Usiądź i znajdź pozycję pamięci a[i][j]
, biorąc pod uwagę pozycję początkową tablicy.
Zauważ, że c tablice są rozplanowane jak niniejszej noty a[0][0]
a[0][1]
a[0][2]
... a[0][M]
a[1][0]
...
Side: FORTRANIE tablice są określone inaczej: a[1][1]
a[2][1]
a[3][1]
... a[N][1]
a[1][2]
..
Zauważ, jak zmieniłoby to , który wymiar jest potrzebny do znalezienia pozycji pamięci.
To nie jest "drugi wymiar" (z wyjątkiem sytuacji, gdy masz tylko dwa wymiary) - to "wszystko, ale nie pierwszy wymiar". Możesz na przykład mieć int a[][2][3][4]
. Bez tych wymiarów nie byłoby możliwe obliczenie adresu elementu.
- 1. Wymiar, zmieniając tylko szerokość/wysokość
- 2. Jak uzyskać wymiar (wycinek) z wielowymiarowej tablicy
- 3. iteracji jeden wymiar tablicy w tablicy dwóch wymiarach
- 4. Dlaczego <$> działa tylko na drugi element pary?
- 5. Dlaczego końcowy ukośnik w serwisie jest tak ważny?
- 6. Dlaczego ten kod jest ważny: "(1, eval) (" this ")"
- 7. Uszkodzona tablica PowerShell traci wymiar, gdy istnieje tylko jeden element.
- 8. Czy plik project.xcworkspace jest ważny?
- 9. Dlaczego regeks Javascript jest dopasowywany co drugi raz?
- 10. uzyskać drugi do ostatniego elementu tablicy?
- 11. Dlaczego decltype (klasa klasa :: :: :: członkiem klasy) ważny
- 12. jest ciągiem zapytania z/jest ważny?
- 13. regex.test() działa tylko co drugi raz
- 14. Jak ważny jest dumb-init dla Docker?
- 15. Podzbiór tablicy R: utracony wymiar, gdy jego długość wynosi 1
- 16. glbufferData drugi arg jest GLsizeiptr nie GLsizei, dlaczego?
- 17. W std :: exchange, dlaczego drugi parametr szablonu jest domyślnie ustawiony?
- 18. check MongoDB Węzeł jeśli objectID jest ważny
- 19. Dołącz tablicę 2D do tablicy 3D, rozszerzając trzeci wymiar
- 20. IsPersistent nie działa - plik cookie ważny tylko dla bieżącej sesji
- 21. CreateQuery nie jest ważny bez aktywnej transakcji
- 22. Android ViewPager wymiar
- 23. Dlaczego NVL zawsze ocenia drugi parametr?
- 24. Jaki jest drugi parametr NSLocalizedString()?
- 25. Dlaczego operator Flip-flop uwzględnia drugi warunek?
- 26. Token odświeżania OAuth2 ważny tylko przez 14 dni
- 27. słowo nie jest ważny jako identyfikator: VB2010
- 28. Uzyskiwanie długości dwuwymiarowej tablicy
- 29. MongoDB zaawansowanych zapytań: uzyskać elementy w tablicy pasujących drugi warunek
- 30. Dlaczego moja funkcja .on ("click") dla funkcji AuthorButton zwraca moją zmienną tylko co drugi cytat?
Czy mógłbyś podać przykład? Jak to jest, że jeśli mam [3] [4] kompilator potrzebuje tylko [] [4]? Nie mogę tego zrozumieć. Naprawdę. –
Daje kompilatorowi wystarczającą ilość informacji, aby wiedzieć, jak rozmieścić rzeczy w pamięci. Jeśli masz 12 elementów i powiesz je [] [], mogą to być dowolne dwie liczby (x i y), które mnożą się do 12. Jeśli dasz mu [] [4], wie, że x i 4 pomnożyć do 12 , więc x musi być 3. Jeśli pomaga to uczynić go logicznym, ustaw podstawowe równanie z każdym wymiarem po lewej stronie i całkowitą liczbą elementów po prawej stronie. Jest to trudne lub niemożliwe do rozwiązania dla więcej niż jednej zmiennej. – ssube
@peachykeen: jest to nieco mylące. Wymiary są potrzebne do obliczenia adresu elementu tablicy. Pierwszy wymiar nie jest jednak potrzebny, ponieważ nie jest wymagany do obliczania adresu (górna granica jest nieistotna). –