113
OPEROWANIE NA WSKAŹNIKACH
Aby dobrać się do wartości wskazywanej przez zmienną należy użyć unarncgo operatora * (gwiazdka), zwanego operatorem wyłuskania:
#include <stdio.h>
int main (void)
{
int liczba - 80;
int ‘wskaźnik ■ ftliczba;
printf ("Wartość zmiennej: 7.d; jej adres: '/,p.\n", liczba, (void*)Jtliczba);
printf("Adres zapisany we wskaźniku: 7.p, wskazywana wartość: 7,d.\n", (void‘)wskaźnik, ‘wskaźnik);
•wskaźnik ■ 42;
printf ("Wartość zmiennej: 7,d, wartość wskazywana przez wskaźnik: %d\n", liczba, ‘wskaźnik);
liczba = 0x42;
printf ("Wartość zmiennej: 7.d, wartość wskazywana przez wskaźnik: %d\n", liczba, ‘wskaźnik);
return 0;
}
Jest to ważne /. kilku powodów.
Różne typy zajmują w pamięci różną wielkość. Przykładowo, jeżeli w zmiennej typu tinsigucd int zapiszemy liczbę G5 530. to w pamięci będzie istnieć jako:
+--------+--------+
1 komórka11komórka21
llllllllll111110101 - (unsigned int) 65530 +--------+--------+
Wskaźnik do takiej zmiennej (jak i do dowolnej innej) będzie wskazywać na pierwszą komórkę, w której ta zmienna ma swoją wartość.
Jeżeli teraz stworzymy drugi wskaźnik do tego adresu, tym razem typu unsigutHl char*, to wskaźnik przejmie ten adres prawidłowo1, lecz gdy spróbujemy odczytać wartość na jaką wskazuje ten wskaźnik to zostanie odczytana tylko pierwsza komórka i wynik będzie równy 255:
Tak naprawdę nic zawsze można przypisywać wartości jednych wskaźników do innych. Standard C gwarantuje jedynie, Że można przypisać wskaźnikowi typu wid* wartość dowolnego wskaźnika, a nastęiNiic przyi>isać tą wartość do wsfciźnikn pierwotnego typu oraz, ii- dowolny wskaźnik można przypisać «k> wskaźnika typu char*.