Wskaźnik vs tablica
Wskaźnik to typ danych, który zawiera odniesienie do lokalizacji w pamięci (tj. Zmienna wskaźnika przechowuje adres lokalizacji w pamięci, w której przechowywane są niektóre dane). Tablice to najczęściej używana struktura danych do przechowywania kolekcji elementów. Większość języków programowania zapewnia metody łatwego deklarowania tablic i uzyskiwania dostępu do elementów w tablicach.
Co to jest wskaźnik?
Wskaźnik to typ danych, który przechowuje adres lokalizacji w pamięci, w której przechowywane są niektóre dane. Innymi słowy, wskaźnik zawiera odniesienie do lokalizacji w pamięci. Dostęp do danych przechowywanych w miejscu pamięci, do którego odwołuje się wskaźnik, nazywa się dereferencją. Podczas wykonywania powtarzalnych operacji, takich jak przechodzenie przez drzewa / łańcuchy, wyszukiwanie w tabelach itp., Użycie wskaźników poprawiłoby wydajność. Wynika to z faktu, że dereferencje i kopiowanie wskaźników jest tańsze niż faktyczne kopiowanie i dostęp do danych wskazywanych przez wskaźniki. Wskaźnik zerowy to wskaźnik, który niczego nie wskazuje. W Javie dostęp do wskaźnika zerowego wygenerowałby wyjątek o nazwie NullPointerException.
Co to jest tablica?
Na rysunku 1 pokazano fragment kodu zwykle używany do deklarowania i przypisywania wartości do tablicy. Rysunek 2 pokazuje, jak tablica wyglądałaby w pamięci.
wartości int [5]; wartości [0] = 100; wartości [1] = 101; wartości [2] = 102; wartości [3] = 103; wartości [4] = 104; |
Rysunek 1: Kod do deklarowania i przypisywania wartości do tablicy
100 | 101 | 102 | 103 | 104 |
Indeks: 0 | 1 | 2) | 3) | 4 |
Rysunek 2: Tablica zapisana w pamięci
Powyższy kod definiuje tablicę, która może przechowywać 5 liczb całkowitych i są one dostępne za pomocą indeksów od 0 do 4. Jedną ważną właściwością tablicy jest to, że cała tablica jest przydzielona jako pojedynczy blok pamięci i każdy element otrzymuje własną przestrzeń w tablicy . Po zdefiniowaniu tablicy jej rozmiar jest ustalany. Jeśli więc nie jesteś pewien wielkości tablicy w czasie kompilacji, musisz zdefiniować wystarczająco dużą tablicę, aby być po bezpiecznej stronie. Ale w większości przypadków będziemy używać mniejszej liczby elementów niż przydzieliliśmy. Tak więc marnuje się znaczną ilość pamięci. Z drugiej strony, jeśli „wystarczająco duża tablica” nie jest wystarczająco duża, program się zawiesi.
Jaka jest różnica między wskaźnikami a tablicami?
Wskaźnik to typ danych, który przechowuje adres lokalizacji pamięci, w której przechowywane są niektóre dane, natomiast tablice są najczęściej stosowaną strukturą danych do przechowywania kolekcji elementów. W języku programowania C indeksowanie tablic odbywa się za pomocą arytmetyki wskaźnika (tj. I-ty element tablicy x byłby równoważny * (x + i)). Dlatego w C zestaw wskaźników, które wskazują na zestaw kolejnych lokalizacji pamięci, można traktować jako tablicę. Ponadto istnieje różnica w sposobie działania operatora sizeof na wskaźnikach i tablicach. Po zastosowaniu do tablicy operator sizeof zwróci cały rozmiar tablicy, natomiast po zastosowaniu do wskaźnika zwróci tylko rozmiar wskaźnika.