Wskaźniki to zaawansowane funkcje programowania w C i C ++. Zanim nauczymy się wskaźników, poznajmy adresy w programowaniu w C.
Adres w C
Jeśli masz zmienną var w swoim programie, &var
poda swój adres w pamięci.
Używaliśmy adresu wiele razy, używając funkcji scanf()
.
Tutaj wartość wprowadzona przez użytkownika jest przechowywana w adresie zmiennej var. Weźmy działający przykład.
Wyjście
var: 5 address of var: 2686778
Uwaga: po uruchomieniu powyższego kodu prawdopodobnie otrzymasz inny adres.
C Wskaźniki
Wskaźniki (zmienne wskaźnikowe) to specjalne zmienne używane do przechowywania adresów zamiast wartości.
Składnia wskaźnika
Oto jak możemy zadeklarować wskaźniki.
Tutaj zadeklarowaliśmy wskaźnik p typu int
.
Ty może również deklarować wskaźniki w ten sposób.
Weźmy inny przykład deklarowania wskaźników.
Tutaj zadeklarowaliśmy wskaźnik p1 i normalną zmienną p2.
Przypisywanie adresów do wskaźników
Weźmy przykład.
Tutaj 5 jest przypisane do zmiennej c. Adres c jest przypisany do wskaźnika pc.
Uzyskaj wartość rzeczy wskazywanej przez wskaźniki
Aby uzyskać wartość rzeczy wskazywanej przez wskaźniki, używamy *
operator. Na przykład:
Tutaj adres c
jest przypisany do wskaźnika komputera. Aby uzyskać wartość przechowywaną w tym adresie, użyliśmy * pc.
Uwaga: W powyższym przykładzie pc jest wskaźnikiem, a nie *pc
. Nie możesz i nie powinieneś robić czegoś takiego jak *pc = &c
;
Nawiasem mówiąc, *
nazywa się operatorem wyłuskiwania ( podczas pracy ze wskaźnikami). Działa na wskaźniku i podaje wartość przechowywaną w tym wskaźniku.
Zmiana wartości wskazywanej przez wskaźniki
Weźmy przykład.
Przypisaliśmy adres c do wskaźnika pc.
Następnie zmieniliśmy wartość c na 1. Ponieważ pc i adres c jest taki sam, *pc
daje nam 1.
Weźmy inny przykład.
Przypisaliśmy adres c do wskaźnika komputera.
Następnie zmieniliśmy *pc
na 1 za pomocą *pc = 1;
. Ponieważ pc i adres c są takie same, c będzie równe 1.
Weźmy jeszcze jeden przykład.
Początkowo adres c jest przypisywany do wskaźnika komputera za pomocą pc = &c;
. Ponieważ c wynosi 5, *pc
daje nam 5.
Następnie adres d jest przypisywany do wskaźnika komputera za pomocą pc = &d;
. Ponieważ d wynosi -15, *pc
daje nam -15 .
Przykład: działanie wskaźników
Weźmy działający przykład.
Wyniki
Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2
Wyjaśnienie programu
-
int* pc, c;
Tutaj , tworzony jest wskaźnik pc i normalna zmienna c, obie typuint
.
Ponieważ pc i c nie są początkowo inicjalizowane, wskaźnik pc wskazuje na brak adresu lub losowy adres. Zmienna c ma adres, ale zawiera losową wartość śmieci. -
c = 22;
To przypisuje 22 do zmiennej c. Oznacza to, że 22 jest przechowywane w lokalizacji pamięci zmiennej c. -
pc = &c;
Spowoduje to przypisanie adresu zmiennej c do wskaźnika pc. -
c = 11;
To przypisuje 11 do zmiennej c. -
*pc = 2;
Zmienia to wartość w lokalizacji pamięci wskazywanej przez wskaźnik pc na 2.
Typowe błędy podczas pracy ze wskaźnikami
Załóżmy, że chcesz, aby pointer pc wskazać adres c. Następnie,
Oto przykład składni wskaźnika, której początkujący często uważają za mylący.
Dlaczego nie otrzymaliśmy błędu, gdy używając int *p = &c;
?
To dlatego, że
jest równoważne z
W obu przypadkach tworzymy wskaźnik p
(nie *p
) i przypisując do niego &c
.
Aby uniknąć tego nieporozumień, możemy użyć następującego stwierdzenia:
Teraz, gdy już wiesz, czym są wskaźniki, dowiesz się, jak wskaźniki są powiązane z tablicami w następnym samouczku.