indirection) int *w; /* wskaźnik na zmienną typu int */ int a = 100; int b;

w = &a; /* wskaźnik 'w' wskazuje na zmienną typu int 'a' */ b = *w; /* przypisz zmiennej 'b' wartość spod adresu wskazywanego przez 'w'; teraz 'b' równe jest 100 */

Rzutowanie wskaźnika Ponieważ formalnie wskaźnik pokazuje na obszar pamięci, można dowolnie interpretować zawartość tej pamięci. Jest to pewne uogólnienie, które może powodować błędy. Rzutowaniem nazywa się operację wymuszającą interpretację danego wskazania jako określonego typu danych, np.

char* wiki = "Wikipedia"; printf("Adres %d interpreterowany jako\n", (unsigned int)wiki); printf("* łańcuch znaków: %s\n", wiki); printf("* znak: %c\n", *(char*)wiki); printf("* wartość całkowita ze znakiem: %d\n", *(int*)wiki); printf("* wartość całkowita bez znaku: %d\n", *(unsigned int*)wiki);

I przykładowy wynik działania programu: Adres 134514016 interpretowany jako * łańcuch znaków: Wikipedia * znak: W * wartość całkowita ze znakiem: 1768646999 * wartość całkowita bez znaku: 1768646999

Problemy podczas rzutowania O ile takie rzutowanie np.: z typu long double* na typ char* jest bezpieczne, o tyle rzutowanie z char* na long double* może już takowe nie być:

long double c = 0.0; char d = 'x';

long double* wsk1LongDouble = &c; d = *(char*)wsk1LongDouble;