Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.4.3 * ja &

Osoittimen sisällön ottaminen

	*p

on sallittu silloin, kun p on esitelty osoittimeksi johonkin muuhun tyyppiin kuin void tyyppiin. Siis

c-muut\ososij.c - miten osoitinta saa käyttää

	/* 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! */

Tehtävä 8.61 *&

Tästä tehtävästä huolimatta ei alla olevan kaltaisia sotkuja tule käyttää!
Olkoon muuttujien esittelyt kuten ohjelmassa kissaoso.c. Missä seuraavista tapauksissa tulee sijoitetuksi 5 muuttujalle kissa ( *&i tarkoittaa *(&i)):
/* ososotku.c */
/* a */ *&kissoja = 5;
/* b */ &*kissoja = 5;
/* c */ *&*&*&*&kissoja = 5;
/* d */ &*pElaimia = &kissoja; *&*pElaimia = 5;
/* e */ *&pElaimia = kissoja; *pElaimia = 5;

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys