Różnica między odniesieniem C ++ a wskaźnikiem

Chociaż odniesienie C ++ do wskaźnika wydaje się podobne, istnieje znacząca różnica między obydwoma C ++ Reference a Pointer. Zmienną referencyjną można powiedzieć jako inną nazwę dla istniejącej zmiennej. Po zainicjowaniu tej zmiennej nazwa zmiennej może być użyta w odniesieniu do innej zmiennej. Z drugiej strony wskaźniki są zmiennymi, które przechowują adres zmiennej. Jak każda zmienna, są one najpierw deklarowane, a następnie można zapisać w nich adres dowolnej zmiennej. Przyjrzyjmy się szczegółowo różnicom między C ++ Reference a Pointer, jak poniżej.

Bezpośrednie porównanie między C ++ Reference a Pointer (Infografika)

Poniżej znajduje się 7 najważniejszych różnic między C ++ Reference a Pointer

Kluczowe różnice między C ++ Reference a Pointer

Zarówno C ++ Reference vs Pointer są popularnymi wyborami na rynku; omówmy niektóre z głównych różnic między C ++ Reference a Pointer:

Główną różnicą między C ++ Reference a Pointer jest to, że odnosi się do innej zmiennej, podczas gdy ta ostatnia przechowuje adres zmiennej. Odwołania nie zmieniają oryginalnej zmiennej, a zmiana wskaźnika ma wpływ na pierwotną zmienną. Odwołanie musi zostać zainicjowane podczas deklaracji, podczas gdy nie jest konieczne inicjowanie wskaźnika po zadeklarowaniu. Tablicę wskaźników można utworzyć, a tablicy referencji nie można utworzyć. Wartości zerowej nie można przypisać do odwołania, ale można ją przypisać do wskaźnika.

C ++ Tabela odniesienia a tabela porównawcza wskaźników

Podstawowe porównanie między C ++ Reference a Pointer omówiono poniżej:

Podstawa porównania między C ++ Reference a PointerC ++ ReferenceWskaźnik
ZmienneOdwołanie można powiedzieć jako alias do istniejącej zmiennej. Głównym zastosowaniem tej zmiennej jest działanie jako parametr, który działa jako punkt odniesienia. Jest to przekazywane do funkcji. Funkcja, do której jest przekazywana, działa na oryginalnej zmiennej zamiast na kopiowaniu w wartościach. Zmiany wprowadzone w funkcji zostaną również odzwierciedlone na zewnątrz.Zmienne wskaźnikowe to zmienne przechowujące adres. W przeciwieństwie do zwykłych zmiennych, takich jak int, double i char, przechowuje adresy pamięci. Aby ułatwić programowanie, pojawia się potrzeba tej zmiennej. Jest to zmienna, która może przechowywać wartość określonego typu.
DeklaracjaDeklaracja zmiennej referencyjnej C ++ odbywa się poprzez dodanie symbolu „&” przed zmienną. Kiedy jest używane z wyrażeniem, oznacza to, że działa jako adres operatora. Służy do nadania innej nazwy istniejącej zmiennej.
Składnia:
wpisz & newName = istniejąca nazwa ;
// lub
wpisz & newName = istniejąca nazwa ;
// lub
wpisz & newName = istniejąca nazwa ;
Na przykład:
/ * Deklaracja referencyjna testu i inicjalizacja * /
#zawierać
using namespace std;
int main () (
nazwa ciągu = „Priya”; // Zadeklaruj zmienną łańcuchową o nazwie name
ciąg & refName = nazwa; // Zadeklaruj odwołanie (alias) do nazwy zmiennej
// Zarówno refName, jak i nazwa odnoszą się do tej samej wartości „Priya”
cout << nazwa << endl; // Wyświetla wartość zmiennej „Priya”
cout << refName << endl; // Drukuje wartość referencyjną „Priya”
Teraz zmień wartość nazwy
refName = „Karishma”; // Ponownie przypisz nową wartość do refName
cout << refName << endl;
cout << nazwa << endl; // Wartość liczby zmienia również „Karishma”
name = „Snehal”; // Ponownie przypisz nową wartość do nazwy
cout << namer << endl;
cout << refName << endl; // Wartość parametru refName zmienia również „Snehal”
)
Oznacza to, że wartości zmiennej odniesienia można zmienić w oryginale i kopii zmiennej.
Przed użyciem wskaźnika w dowolnym miejscu programu należy go wcześniej zadeklarować. Aby zadeklarować wskaźnik i poinformować system, że jest wskaźnikiem, zmienna jest poprzedzona znakiem „*”. Wskaźnikowi towarzyszy typ danych, który może być liczbą całkowitą lub podwójną itp.
Składnia:
wpisz * pntr ; // Zadeklaruj zmienną wskaźnika o nazwie pntr jako wskaźnik typu
// lub
wpisz * pntr ;
// lub
wpisz * pntr ;
Na przykład:
int * newPtr; // Zadeklaruj zmienną wskaźnika o nazwie newPtr wskazującą na int (wskaźnik int)
Ten wskaźnik będzie zawierał adres. Ten adres zawiera wartość całkowitą.
double * newdPtr; // Zadeklaruj podwójny wskaźnik
* Wskazuje, że wskaźnik jest deklarowany i nie działa jako operator.
Zmiana przypisaniaZmiennej odniesienia nie można przypisać ponownie.
Przykład:
int x = 5;
int y = 6;
int & r = x;
Wskaźnik można przypisać ponownie, a ta właściwość jest przydatna, gdy programista implementuje struktury danych, takie jak listy połączone, drzewa itp.
Przykład:
int x = 5;
int y = 6;
int * p;
p = i x;
p = & y;
Adres pamięciZmienna referencyjna ma ten sam adres co zmienna oryginalna. Odwołania te mogą być przekazywane do różnych funkcji, mogą być przechowywane w różnych klasach itp. Odwołanie nigdy nie wskazuje nowej zmiennej, dopóki stare nie zostanie usunięte lub nie będzie poza zakresem.Wskaźnik ma własny adres pamięci i zapisuje go na stosie. Wskaźnik jest niezależną zmienną i może mieć przypisane nowe wartości.
Wartość zerowaDo odwołania nie można przypisać wartości zerowej.Wskaźnik może mieć bezpośrednio przypisaną wartość zerową.
ArgumentyDo zmiennej referencyjnej można odwoływać się według wartości obejściowej. Tutaj argumenty są przekazywane wartościom do funkcji. Klon jest tworzony i wysyłany do funkcji za jego pomocą. Zmiany wprowadzone w kopii nie mają wpływu na oryginalną zmienną.Gdy chcemy zmienić oryginalną kopię, można to zrobić, przekazując wskaźnik obiektu do funkcji. Jest to znane jako przekazanie przez odniesienie.
Kiedy użyćOdnośniki uzyskują pośredni dostęp do zmiennej. Rozważ następujący przykład:
dzień wyliczenia
(
Niedziela poniedziałek, …
);
Jeśli zdefiniujemy zmienną
dzień x;
I chcemy przeciążyć operatora do instrukcji, a następnie możemy napisać jak poniżej:
dzień i operator ++ (dzień i dzień)
(
d = (dzień) (d + 1);
zwróć d;
)
Krótko mówiąc, można tego użyć w parametrach funkcji i typach referencyjnych.
Korzystanie ze wskaźników nie wymaga wcześniejszej deklaracji.
dzień * operator ++ (dzień * d);
Można to wykorzystać do zaimplementowania struktur danych i operacji arytmetycznych na wskaźnikach.

Wniosek - C ++ Reference vs Pointer

C ++ Reference vs Pointer jest trudny w obróbce, ale znacznie poprawia wydajność programu. Oba C ++ Reference vs Pointer mają swoje własne zastosowania i służą własnym celom. Możesz użyć wskaźników, gdy chcesz zaimplementować struktury danych i algorytmy, a odniesień, gdy chcesz użyć funkcji i parametrów z typami zwracanymi.

Polecany artykuł

Jest to przewodnik po najważniejszych różnicach między C ++ Reference a Pointer. Tutaj omawiamy również różnice w C ++ Reference vs Pointer z infografikami i tabelą porównawczą. Możesz także zapoznać się z następującymi artykułami, aby dowiedzieć się więcej -

  1. Różnice między Pythonem a C ++
  2. Wydajność C vs C ++ - najlepsze różnice
  3. MongoDB vs Cassandra
  4. Mobx vs Redux
  5. C ++ Vector vs Array: Najważniejsze różnice
  6. MongoDB vs DynamoDB: Funkcje
  7. MongoDB vs SQL: jakie są funkcje
  8. C vs C #: Funkcje