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:
- funkcja wywoływana przez przekazanie odwołania
- 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
- Wskaźniki w Pythonie
- Typy danych w C
- Tablice w C ++
- Wzory gwiazd W c ++
- Jak działają wskaźniki w języku C #?