Wskaźniki w programowaniu w C z przykładami

Wskaźnik to zmienna, która przechowuje adres innej zmiennej. W przeciwieństwie do innych zmiennych, które przechowują wartości określonego typu, wskaźnik przechowuje adres zmiennej. Na przykład zmienna typu integer przechowuje (lub można powiedzieć, że przechowuje) wartość całkowitą, natomiast wskaźnik liczby całkowitej przechowuje adres zmiennej całkowitej. W tym przewodniku omówimy wskaźniki w programowaniu w C z pomocą przykładów.

Zanim omówimy wskaźniki w C, weźmy prosty przykład, aby zrozumieć, co rozumiemy przez adres zmiennej.

Prosty przykład, aby zrozumieć, jak uzyskać dostęp do adresu zmiennej bez wskaźników?

W tym programie mamy zmienną num typu int. Wartość num to 10 i ta wartość musi być gdzieś w pamięci, prawda? Przestrzeń pamięci jest przydzielana dla każdej zmiennej, która przechowuje wartość tej zmiennej, ta przestrzeń pamięci ma adres. Na przykład mieszkamy w domu, a nasz dom ma adres, który pomaga innym osobom znaleźć nasz dom. W ten sam sposób wartość zmiennej jest przechowywana w adresie pamięci, co pomaga programowi C znaleźć tę wartość, kiedy jest potrzebna.

Powiedzmy, że adres przypisany do zmiennej num to 0x7fff5694dc58, co oznacza, że każda wartość, którą przypisalibyśmy do num, powinna być zapisana w lokalizacji: 0x7fff5694dc58. Zobacz poniższy diagram.

Wynik:

Value of variable num is: 10Address of variable num is: 0x7fff5694dc58

Prosty przykład wskaźników w C

Ten program pokazuje, jak wskaźnik jest deklarowany i używany. Jest kilka innych rzeczy, które możemy zrobić za pomocą wskaźników, omówiliśmy je w dalszej części tego przewodnika. Na razie musimy tylko wiedzieć, jak połączyć wskaźnik z adresem zmiennej.

Ważna kwestia, na którą należy zwrócić uwagę: Typ danych wskaźnika a zmienna musi pasować, wskaźnik int może zawierać adres zmiennej int, podobnie wskaźnik zadeklarowany z typem danych float może zawierać adres zmiennej float. W poniższym przykładzie zarówno wskaźnik, jak i zmienna są typu int.

Dane wyjściowe:

Address of variable num is: 0x7fff5694dc58

Wskaźniki C – operatory używane ze wskaźnikami

Omówimy operatory & i *, które są używane ze wskaźnikami w C.

„Adres” (&) Operator

W pierwszym przykładzie widzieliśmy już, że możemy wyświetlić adres zmiennej za pomocą znaku ampersand Znak. Użyłem & num, aby uzyskać dostęp do adresu zmiennej num. Operator & jest również znany jako operator „Adres”.

printf("Address of var is: %p", &num);

Warto zwrócić uwagę:% p to specyfikator formatu używany do wyświetlania adresu w formacie szesnastkowym.
Teraz, gdy wiesz, jak uzyskać adres zmiennej, ale jak przechowywać ten adres w innej zmiennej? W tym miejscu pojawiają się wskaźniki. Jak wspomniano na początku tego przewodnika, wskaźniki w programowaniu w C są używane do przechowywania adresów innych zmiennych.

Wskaźnik jest jak inna zmienna, główna różnica polega na tym, że przechowuje adres innej zmiennej, a nie wartość.

Operator „Wartość pod adresem” (*)

Operator * jest również nazywany operatorem Wartość pod adresem.

Jak zadeklarować wskaźnik ?

Powyżej znajduje się kilka przykładów deklaracji wskaźników.Jeśli potrzebujesz wskaźnika do przechowywania adresu zmiennej całkowitej, typ danych wskaźnika powinien być int. Ten sam przypadek jest z innymi typami danych.

Używając operatora *, możemy uzyskać dostęp do wartości zmiennej poprzez wskaźnik.
Na przykład:

double a = 10;double *p;p = &a;

* p dałoby nam wartość zmiennej a. Następująca instrukcja wyświetliłaby 10 jako wyjście.

printf("%d", *p);

Podobnie, jeśli przypiszemy wartość * wskaźnikowi w następujący sposób:

*p = 200;

Zmieniłoby to wartość v ariable a. Powyższa instrukcja zmieni wartość a z 10 na 200.

Przykład wskaźnika demonstrujący użycie & i *

Dane wyjściowe :

Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50

Weźmy więcej przykładów, aby lepiej to zrozumieć –
Powiedzmy, że mamy zmienną char ch i wskaźnik ptr, który przechowuje adres ch.

char ch="a";char *ptr;

Przeczytaj wartość ch

printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);

Zmień wartość ch

ch = "b";or*ptr = "b";

Powyższy kod zamieni wartość „a” na „ b .

Czy potrafisz odgadnąć wynik działania następującego programu w języku C?

Wynik:

Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50

Więcej tematów na wskaźnikach

1) Wskaźnik do wskaźnika – Wskaźnik może wskazywać na inny wskaźnik (co oznacza, że może przechowywać adres innego wskaźnika), takie wskaźniki są znane jako podwójny wskaźnik LUB wskaźnik do wskaźnika.

2) Przekazywanie wskaźników do funkcji – Wskaźniki mogą być również przekazywane jako argument do funkcji, przy użyciu tej funkcji można wywołać funkcję przez referencję, jak również tablicę można przekazać do funkcji podczas wywoływania.

3) Wskaźniki funkcji – Wskaźnik funkcji jest podobny do innego wskaźnika, służy do przechowywania adresu funkcji. Wskaźnik funkcji może być również użyty do wywołania funkcji w programie w C.

Dodaj komentarz

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