Różnica między wskaźnikiem a tablicą

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.