OPEROWANIE NA WSKAŹNIKACH 113 Aby dobrać się do wartości wskazywanej przez zmienną należy użyć unarnego ope- ratora * (gwiazdka), zwanego operatorem wyłuskania : #include int main (void) { int liczba = 80; int *wskaznik = &liczba; printf("Wartosc zmiennej: %d; jej adres: %p.\n", liczba, (void*)&liczba); printf("Adres zapisany we wskazniku: %p, wskazywana wartosc: %d.\n", (void*)wskaznik, *wskaznik); *wskaznik = 42; printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %d\n", liczba, *wskaznik); liczba = 0x42; printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %d\n", liczba, *wskaznik); return 0; } O co chodzi z tym typem, na który ma wskazywać? Czemu to takie ważne? Jest to ważne z kilku powodów. Różne typy zajmują w pamięci różną wielkość. Przykładowo, jeżeli w zmiennej typu unsigned int zapiszemy liczbę 65 530 , to w pamięci będzie istnieć jako: +--------+--------+ |komórka1|komórka2| +--------+--------+ |11111111|11111010| = (unsigned int) 65530 +--------+--------+ Wskaźnik do takiej zmiennej (jak i do dowolnej innej) będzie wskazywać na pierw- szą komórkę, w której ta zmienna ma swoją wartość. Jeżeli teraz stworzymy drugi wskaźnik do tego adresu, tym razem typu unsigned char* , to wskaźnik przejmie ten adres prawidłow o2, 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 : 2Tak naprawdę nie zawsze można przypisywać wartości jednych wskaźników do innych. Standard C gwarantuje jedynie, że można przypisać wskaźnikowi typu void* wartość dowolnego wskaźnika, a następnie przypisać tą wartość do wskaźnika pierwotnego typu oraz, że dowolny wskaźnik można przypisać do wskaźnika typu char*.
... zobacz całą notatkę
Komentarze użytkowników (0)