Wskaźniki C

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

  1. int* pc, c;

    Tutaj , tworzony jest wskaźnik pc i normalna zmienna c, obie typu int.
    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.
  2. c = 22;

    To przypisuje 22 do zmiennej c. Oznacza to, że 22 jest przechowywane w lokalizacji pamięci zmiennej c.
  3. pc = &c;

    Spowoduje to przypisanie adresu zmiennej c do wskaźnika pc.
  4. c = 11;

    To przypisuje 11 do zmiennej c.
  5. *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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *