Jakie są wskaźniki w C ++?

Wskaźniki najpotężniejsze narzędzie w c ++, pomaga programiście uzyskać bezpośredni dostęp do pamięci i manipulować nią. Na przykład, gdy tworzona jest zmienna, zadaniem kompilatora jest przydzielenie pamięci w celu przechowywania wartości zmiennej. Ta wartość jest pobierana przy użyciu nazwy zmiennej przypisanej do danych. C ++ ma kompatybilność do przechowywania i pobierania danych z pamięci, odnosząc się do adresu lokalizacji pamięci, w której dane są przechowywane. C ++ wykonuje nawet wskaźniki na wskaźniku.

Składnia

Ogólny format deklaracji wskaźnika to:

Data_type * pointer -variable-name

Zauważ, że zmienna wskaźnika powinna być poprzedzona gwiazdką (*)

Przykład: int * xptr;

Zmienna xptr jest wskaźnikiem do liczby całkowitej. Zasadniczo zmienne wskaźnikowe mogą wskazywać na zmienne całkowite, zmienne znakowe, tablice, pliki, funkcje.

Dlaczego potrzebujemy wskaźników w C ++?

Dynamiczne przydzielanie pamięci jest proste w C ++ przy użyciu wskaźników, najważniejsze znaczenie wskaźników jest to, że są one bardzo wydajne w obsłudze różnych typów danych. Zwiększają szybkość wykonywania, gdy funkcja zwraca jedną wartość, a także umożliwiają dostęp do zmiennej zdefiniowanej poza funkcją. Najczęstsze użycie obejmuje zarządzanie danymi i dostęp do funkcji członków klasy.

Jak tworzyć wskaźniki w C ++?

Oto następujące kroki, aby utworzyć wskaźniki w C ++

Krok # 1 - Inicjalizacja wskaźników

Wskazane jest inicjowanie zmiennych wskaźnikowych, gdy tylko zostaną zadeklarowane. Ponieważ zmienne wskaźnikowe przechowują adresy, mogą adresować dowolną część pamięci.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Rozważ następujący przykład:

int p, * pi; // Ta instrukcja instruuje kompilator, aby zarezerwował miejsce dla zmiennej p w pamięci na wartość całkowitą.

pi = & a; // Przypisuje adres zmiennej całkowitej p do zmiennej wskaźnikowej. Na przykład, jeśli adres p wynosi 4581, wówczas wartość w * pi będzie równa 4581.

Krok # 2 - Wskaźnik nieważny

W tym przypadku zmienna wskaźnikowa może wskazywać dowolny typ danych i ten typ jest używany do przekazywania wskaźników do funkcji, które działają niezależnie od wskazanego typu danych.

Składnia: void * zmienna wskaźnika;

Przykład:

#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )

Wynik:

$ g ++ -o main * .cpp
$ main
wartość wskazywana przez iv wynosi 3
Adres x to 0x7ffefbbee6d4
wartość wskazana przez fv wynosi 45, 2
Adres f to 0x7ffefbbee6d0
Adres x to 0x7ffefbbee6d4

adres f to 0x7ffefbbee6d0

Krok # 3 - Wskaźniki Operacje arytmetyczne w C ++

Arytmetyka wskaźnika jest wykonywana za pomocą tablic. Na wskaźnikach można wykonać następujące operacje. Oni są:

  • Przyrost (++)
  • Zmniejszenie (-)
  • Dodanie wskaźnika
  • Odejmowanie wskaźnika

Kiedy dodajemy 1 do wskaźnika, określa to dodanie rozmiaru wskaźnika wskazującego na.

Poniższy program określa arytmetykę wskaźnika, która działa, dopóki nie znajdzie się na końcu tablicy.

#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)

Wynik:

$ g ++ -o main * .cpp
$ main
2)

4

6

8

10

12

14

16

18

20

0

0

4196480

0

-1743362854

32686

1

0

153860328

32766

Krok # 4 - Wskaźnik do wskaźnika

float ** fpp;

Oznacza dwa poziomy wskaźników ( wiele pośrednich ). Jest to zmienna wskazująca inny wskaźnik, który dalej wskazuje na obiekt określony w lokalizacji pamięci. Na przykład, fpp jest wskaźnikiem zmiennoprzecinkowym obecnie wskazującym na adres pamięci 2001, rozmiar zmiennoprzecinkowy wynosi 8 bajtów, a następnie

fpp ++;

wskazuje fpp wskazujący na adres 2009. Podobnie, gdy zmienna jest zmniejszana o 1, wskaże poprzednią lokalizację swojego typu podstawowego pod adresem 1993.

Krok # 5 - Wskaźnik do funkcji

Gdy wskaźniki są przekazywane do funkcji jako argumenty, elementy danych powiązane ze zmienną tych wskaźników są zmieniane w funkcji, a następnie wracają do programu wywołującego, zmiany zostaną zachowane w programie wywołującym. Gdy wskaźnik jest przekazywany jako parametr, odpowiednie elementy danych są zmieniane globalnie z poziomu wywoływanej funkcji. Wskaźnik jest przekazywany przez odniesienie. Funkcje można wykonywać za pomocą wskaźników na różne sposoby:

  1. funkcja wywoływana przez przekazanie odwołania
  2. Funkcja wywoływana przez przekazanie wskaźnika

Funkcja wywoływana przez przekazanie odwołania

W tym przypadku adres jest przekazywany jako argument zamiast wartości.

Przykład:

#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)

Wynik:

$ g ++ -o main * .cpp
$ main
Przed zmianą

n = 5

m = 6

Po zmianie

n = 6

m = 5

Wniosek

Ten artykuł miał na celu odświeżenie wiedzy na temat używania wskaźników w C ++ i ich podstawowych tematów w prosty sposób na przykładzie. Wskaźnik jest również znany jako lokalizator, który zmniejsza instrukcję w celu zwiększenia wydajności. Wskaźniki odgrywają istotną rolę we wdrażaniu struktur danych, takich jak lista połączona i programowanie na poziomie systemu. Są najbardziej preferowanym językiem w systemach wbudowanych, ponieważ są dobrym sposobem na bezpośredni dostęp do pamięci za pomocą wskaźników.

Polecane artykuły

To jest przewodnik po Pointers w C ++. Tutaj omawiamy sposób tworzenia wskaźników w C ++ z podanymi przykładami i danymi wyjściowymi oraz dlaczego go potrzebujemy. Możesz także zapoznać się z poniższym kursem analizy danych, aby dowiedzieć się więcej

  1. Wskaźniki w Pythonie
  2. Typy danych w C
  3. Tablice w C ++
  4. Wzory gwiazd W c ++
  5. Jak działają wskaźniki w języku C #?