L 5,R 65,J,T 5 SUBSECTION Osoitin osoittimeen Usein tulee vastaan tilanne, jossa tarvitsemme osoittimen,joka osoittaa toiseen osoittimeen. T„llainen tilanne tuleeesimerkiksi tutkittaessa mill„ parametreill„ p„„ohjelmak„ynnistettiin. BEGIN GESIMERKKI int main(int argv, char **argc) END GESIMERKKI Aikaisemmin kuvasimme osoitinta sormella, joka osoittaa lukuun, josta olemme kiinnostuneita. Sormiesimerkiss„ voisimme kuvata osoitinta osoittimeen siten, ett„ useita ihmisi„on osoittamassa eri kortteihin. Osoitin osoittimeen (O)olisi nyt jokin sormi joka osoittaisi vaikkapa henkil”n Asormea. BEGIN GESIMERKKI ÚÄÄ¿ **O ÚÄÄÄÄÄÄÄÄÄ> ³P7³ *A kortit[0] *O ³ ÀÄÄÙ ÚÄÄ> A ÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄ¿ ³ ÚÄÄÄÄÄ> ³P3³ *C kortit[1] ³ ³ ÀÄÄÙ ³ ÚÄÄÄÄÄÄÄÄÙ ÚÄÄ¿ O ÄÄÄÙ B ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³PK³ kortit[2] ³ ³ ÀÄÄÙ ³ ³ ÚÄÄ¿ ³ ÀÄÄÄÄÄÄÄÄÄ> ³P2³ *B kortit[3] C ÄÄÄÄÄÄÄÄÙ ÀÄÄÙ ÚÄÄ¿ ³P5³ kortit[4] ÀÄÄÙ ÚÄÄ¿ ³P9³ kortit[5] ÀÄÄÙ END GESIMERKKI Siis O = &A => *O = *&A = A. A osoittaa pata 7:aan eli*A=P7. Toisaalta *A=*(*O)=**O eli **O=P7. Nyt josteht„isiin sijoitus (A=&kortit[4]) jonka j„lkeen A osoittaisi P5:een, niin tietysti my”s **O=P5. BEGIN TEHTAVA TehtOts **O Mit„ olisi **O seuraavien sijoitusten j„lkeen (oletetaan, ett„ kukin sijoitus on tehty yll„ olevan kuvan tilanteen j„lkeen, eli sijoitukset eiv„t t„ll„ kertaa ole kumuloituvia)? BEGIN GESIMERKKI a) O = &C; b) O = &B; c) *A = P9; d) A = C; e) kortit[0] = PA; f) A = &kortit[2]; END GESIMERKKI END TEHTAVA BEGIN TEHTAVA TehtOts Osoitin osoittimeen Oletetaan seuraavan ohjelman muuttujille seuraavat osoitteet: BEGIN GESIMERKKI &kissoja == 100 &koiria == 102 &kissaos == 104 &koiraos == 106 &oso2 == 108 END GESIMERKKI P”yt„testaa seuraava ohjelma: L 5,R 84,J,T 5 20 BEGIN GESIMERKKI /* Mit„ ohjelma tulostaa? */ #include int main(void) { int kissoja,koiria; int *kissaos,*koiraos; /* Osoitinmuuttujia kokonaislukuun. */ int **elain_oso; /* Osoitin kokonaisluku osoittimeen. */ elain_oso = &kissaos; kissaos = &kissoja; koiraos = &koiria; **elain_oso = 5; elain_oso = &koiraos; **elain_oso = 3; koiraos = &kissoja; **elain_oso = 7; printf("Kissoja on %d ja koiria %d.\n",kissoja,koiria); return 0; } END GESIMERKKI L 5,R 65,J,T 5 20 END TEHTAVA