Zalecane, 2024

Wybór Redakcji

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

"Wskaźnik" i "odnośnik" są używane do wskazywania lub wskazywania innej zmiennej. Ale podstawową różnicą między nimi jest to, że zmienna wskaźnika wskazuje na zmienną, której lokalizacja pamięci jest w niej przechowywana. Zmienna referencyjna jest aliasem dla zmiennej, która jest do niej przypisana. Poniższa tabela porównawcza omawia pozostałe różnice między wskaźnikiem a odwołaniem.

Wykres porównania

Podstawa do porównaniaWskaźnikOdniesienie
PodstawowyWskaźnik jest adresem pamięci zmiennej.Odniesienie jest aliasem dla zmiennej.
ZwrotyZmienna wskaźnika zwraca wartość znajdującą się pod adresem zapisanym w zmiennej wskaźnika, która jest poprzedzona znakiem wskaźnika "*".Zmienna referencyjna zwraca adres zmiennej poprzedzonej znakiem odniesienia "&".
Operatorzy*, ->&
Null ReferenceZmienna wskaźnika może odnosić się do NULL.Zmienna referencyjna nigdy nie może odnosić się do NULL.
InicjalizacjaMożna utworzyć niezainicjowany wskaźnik.Niezainicjowane odniesienie nigdy nie zostanie utworzone.
Czas inicjalizacjiZmienna wskaźnika może zostać zainicjalizowana w dowolnym momencie w programie.Zmienna referencyjna może zostać zainicjowana dopiero w momencie jej utworzenia.
ReinicjalizacjaZmienna wskaźnika może zostać ponownie zainicjalizowana tyle razy, ile potrzeba.Zmienna referencyjna nie może zostać ponownie zainicjowana w programie.

Definicja wskaźnika

"Wskaźnik" jest zmienną przechowującą położenie innej zmiennej. Operatorami używanymi przez zmienną wskaźnika są * i ->. Deklaracja zmiennej wskaźnika zawiera podstawowy typ danych, po którym następuje znak "*" i nazwa zmiennej.

 wpisz * nazwa_zmiennej; 

Rozumiem wskaźnik za pomocą przykładu.

 int a = 4; int * ptr = & a; cout < 

Tutaj mamy zmienną całkowitą a oraz zmienną wskaźnikową ptr, która przechowuje adres zmiennej a.

Wskaźnik arytmetyczny

Zmienna wskaźnika może działać z dwoma operacjami arytmetycznymi, które są "dodawaniem" i "odejmowaniem". Dodanie określone jako "przyrost", a odejmowanie jest określane jako "zmniejszenie". Ponieważ zmienna wskaźnika jest inkrementowana, wskazuje na lokalizację pamięci następnej zmiennej jej typu podstawowego. Ponieważ zmienna wskaźnika jest zmniejszana, wskazuje na lokalizację pamięci poprzedniej zmiennej jej typu podstawowego. W związku z tym do tablicy można uzyskać łatwy dostęp za pomocą zmiennej wskaźnika.

Wielokierunkowy

Wskaźnik wskazuje na drugą zmienną wskazującą, która wskazuje na wartość docelową. Ten rodzaj wskaźnika jest zawsze inicjalizowany adresem innej zmiennej wskaźnikowej. Deklaracja wskaźnika do wskaźnika jest następująca.

 typ ** nazwa_zmiennej; 

Przyjrzyjmy się temu przykładowi.

 int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; cout < 

Wskaźnik funkcji

Ponieważ wiemy, że funkcja nie jest zmienną, nadal ma ona lokalizację w pamięci, którą można przypisać do zmiennej wskaźnika. Gdy wskaźnik wskazuje na funkcję, funkcja może zostać wywołana za pomocą tego wskaźnika funkcji.

Ważne punkty do zapamiętania na temat wskaźnika.

  • Zmienna wskaźnika może zostać utworzona bez inicjalizacji i może zostać zainicjowana w dowolnym miejscu w programie.
  • Zmienna wskaźnika może zostać ponownie zainicjalizowana do innej zmiennej.
  • Zmienna wskaźnika może odnosić się do NULL.

Definicja odniesienia

Zmienna referencyjna jest używana do odniesienia do zmiennej, która jest przypisana do tej zmiennej referencyjnej. Operator używany przez zmienną referencyjną to "&". Deklaracja zmiennej referencyjnej zawiera typ podstawowy, po którym następuje znak "&", a następnie nazwa zmiennej.

 type & refer_var_name = nazwa_zmiennej; 

Tutaj typ jest typem danych, operator & potwierdza, że ​​jest to zmienna referencyjna. Nazwa refer_var jest nazwą zmiennej referencyjnej. Zmienna nazwa_zmiennej to nazwa zmiennej, którą chcemy odnieść do zmiennej referencyjnej.

Rozumiemy zmienną referencyjną za pomocą przykładu.

 int a = 4; int & b = a; // b odnosi się do ab = 6; // teraz a = 6 

W tym przypadku zmiennej typu int przypisuje się wartość 4. Zmiennej odniesienia przypisuje się zmienną a, tj. B jest aliasem a. Teraz, gdy przypisujemy inną wartość do b, modyfikujemy wartość a. Dlatego można powiedzieć, że zmiany dokonane w zmiennej referencyjnej będą również występować w zmiennej, do której odnosi się ta zmienna referencyjna.

Najważniejszą kwestią jest to, że zmienna referencyjna musi zostać zainicjalizowana w momencie jej utworzenia. Gdy zmienna referencyjna zostanie zainicjowana za pomocą zmiennej, nie można jej ponownie zainicjować, aby odnieść się do innej zmiennej. W momencie przypisania wartości do zmiennej referencyjnej przypisujesz tę wartość do zmiennej, do której wskazuje zmienna referencyjna. Zmienna referencyjna nigdy nie może odnosić się do NULL. Arytmetyka nie może być wykonana na zmiennej referencyjnej.

Zmienna referencyjna może być używana na trzy sposoby:

  • Jako funkcja zwraca wartość.
  • Jako parametr funkcji.
  • Jako samodzielne odniesienie.

Kluczowe różnice między wskaźnikiem i odniesieniem

  1. Odniesienie jest jak tworzenie innej nazwy, która odsyła zmienną, aby można ją było odnosić do różnych nazw. Z drugiej strony wskaźnik jest po prostu adresem pamięci zmiennej.
  2. Zmienna wskaźnika, jeśli poprzedzona jest przez "*", zwraca wartość zmiennej, której adres jest przechowywany w wskaźniku zmiennym. Zmienna wzorcowa poprzedzona przez "&" zwraca adres tej zmiennej.
  3. Operatorami wskaźnikowymi są * i -> podczas gdy operatorem referencyjnym jest &.
  4. Zmienna wskaźnika, jeśli nie przenosi żadnego adresu zmiennej, wskazuje na wartość null. Z drugiej strony, zmienna referencyjna nigdy nie może odnosić się do wartości Null.
  5. Zawsze możesz utworzyć zindywidualizowaną zmienną wskaźnika, ale tworzymy referencję, gdy potrzebujemy aliasu jakiejś zmiennej, więc nigdy nie możesz utworzyć ujednoliconej referncji.
  6. Możesz ponownie zainicjować wskaźnik, ale po zainicjowaniu arefernce nie możesz go ponownie zainicjować.
  7. Możesz utworzyć pusty wskaźnik i zainicjować go w dowolnym momencie, ale musisz zainicjować refren tylko podczas tworzenia referncji.

Uwaga:

Java nie obsługuje wskaźników.

Wniosek

Wskaźnik i odnośnik służą do wskazywania lub wskazywania innej zmiennej. Ale oba różnią się pod względem wykorzystania i wdrożenia.

Top