Osoittimen sisällön ottaminen
*p
on sallittu silloin, kun p on esitelty osoittimeksi johonkin muuhun tyyppiin kuin void tyyppiin. Siis
/* ososij.c */ int *p,i; ... i = *p; /* OK jos on ollut sijoitus p = */ double *p,d; ... d = *p; /* OK jos on ollut sijoitus p = */ void *p; int i; ... i = *p; /* VÄÄRIN */
Jos otetaan muuttujan osoite
&i
saadaan osoitin, joka on samaa tyyppiä kuin muuttuja. Siis
int i,*p; p = &i; /* OK */ double *p,d; p = &d; /* OK */ void *p; int i; p = &i; /* OK, koska void osoittimelle saa sijoittaa minkä tahansa osoittimen */
Seuraavat ovat oikein, mutta niitä täytyy varoa:
double *p; int i; p = &i; /* VAARALLINEN */ i = *p; /* OK, paikassa p oleva double muuttuu int */
Jos i ja j on esitelty vaikkapa int i,j; , ei seuraavassa ole mieltä:
int i,j; j = *i; /* VÄÄRIN, koska i ei ole osoitin! */