previous next Up Title Contents Index

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;


previous next Up Title Contents Index