Wskaźnik vs tablica
Wskaźnik to typ danych, który zawiera odniesienie do miejsca w pamięci (tj. Zmienna wskaźnikowa przechowuje adres miejsca w pamięci, w którym przechowywane są niektóre dane). Tablice są najczęściej używaną strukturą danych do przechowywania kolekcji elementów. Większość języków programowania udostępnia metody umożliwiające łatwe deklarowanie tablic i uzyskiwanie dostępu do elementów w tablicach.
Co to jest wskaźnik?
Wskaźnik to typ danych, który przechowuje adres lokalizacji pamięci, w której przechowywane są niektóre dane. Innymi słowy, wskaźnik zawiera odniesienie do miejsca w pamięci. Dostęp do danych przechowywanych w lokalizacji pamięci, do której odwołuje się wskaźnik, nazywamy wyłuskiwaniem. Podczas wykonywania powtarzalnych operacji, takich jak przechodzenie po drzewach / łańcuchach, przeszukiwanie tabel itp., Użycie wskaźników poprawiłoby wydajność. Dzieje się tak, ponieważ wyłuskiwanie i kopiowanie wskaźników jest tańsze niż faktyczne kopiowanie i uzyskiwanie dostępu do danych wskazywanych przez wskaźniki. Wskaźnik pusty to wskaźnik, który na nic nie wskazuje. W Javie dostęp do pustego wskaźnika wygenerowałby wyjątek zwany NullPointerException.
Co to jest tablica?
Na rysunku 1 pokazano fragment kodu zwykle używany do deklarowania i przypisywania wartości do tablicy. Rysunek 2 przedstawia, jak tablica wyglądałaby w pamięci.
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 przechowywana 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ą z ważnych właściwości tablicy jest to, że cała tablica jest alokowana jako pojedynczy blok pamięci, a każdy element otrzymuje własną przestrzeń w tablicy. Po zdefiniowaniu tablicy jej rozmiar jest ustalany. Więc jeśli nie masz pewności co do rozmiaru tablicy w czasie kompilacji, musisz zdefiniować wystarczająco dużą tablicę, aby była bezpieczna. Ale w większości przypadków będziemy używać mniejszej liczby elementów niż przydzieliliśmy. Tak więc znaczna ilość pamięci jest marnowana. Z drugiej strony, jeśli „wystarczająco duża tablica” nie jest w rzeczywistości wystarczająco duża, program ulegnie awarii.
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, podczas gdy tablice są najczęściej używaną strukturą danych do przechowywania kolekcji elementów. W języku programowania C indeksowanie tablicy odbywa się za pomocą arytmetyki wskaźnikowej (tj. I-ty element tablicy x byłby równoważny * (x + i)). Dlatego w C zbiór wskaźników wskazujących na zbiór kolejnych lokalizacji pamięci może być traktowany jako tablica. Ponadto istnieje różnica w działaniu operatora sizeof na wskaźnikach i tablicach. Operator sizeof zastosowany do tablicy zwróci cały rozmiar tablicy, podczas gdy zastosowany do wskaźnika zwróci tylko rozmiar wskaźnika.