Wskaźnik a tablica
Wskaźnik to typ danych, który przechowuje odniesienie do lokalizacji w pamięci (tj. zmienna wskaźnikowa przechowuje adres lokalizacji w pamięci, w której 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 do ł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 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 lokalizacji pamięci, do której odwołuje się wskaźnik, nazywa się dereferencją. Podczas wykonywania powtarzalnych operacji, takich jak przechodzenie przez drzewa/ciągi, przeglądanie 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. Pusty wskaźnik to wskaźnik, który niczego nie wskazuje. W Javie dostęp do wskaźnika zerowego generował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 przedstawia wygląd tablicy w pamięci.
wartości int[5]; values[0]=100; wartości[1]=101; wartości[2]=102; values[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 swoją własne miejsce w tablicy. Po zdefiniowaniu tablicy jej rozmiar jest ustalony. Więc jeśli nie masz pewności co do rozmiaru tablicy w czasie kompilacji, musisz zdefiniować wystarczająco dużą tablicę, aby była po bezpiecznej stronie. Ale w większości przypadków będziemy używać mniej elementów niż przydzieliliśmy. Tak więc znaczna ilość pamięci jest faktycznie marnowana. 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, podczas gdy tablice są najczęściej używaną strukturą danych do przechowywania kolekcji elementów. W języku programowania C indeksowanie tablic odbywa się za pomocą arytmetyki wskaźników (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 w pamięci, można traktować jako tablicę. Ponadto istnieje różnica w sposobie, w jaki operator sizeof działa na wskaźnikach i tablicach. Po zastosowaniu do tablicy operator sizeof zwróci cały rozmiar tablicy, podczas gdy zastosowany do wskaźnika zwróci tylko rozmiar wskaźnika.