Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.5.7 Nimessään arvon palauttavat funktiot

Funktion arvo palautetaan return - lauseessa. Jokaisessa ei- void - tyyppiseksi esitellyssä funktiossa tulee olla vähintään yksi return - lause. void- tyyppisessäkin voi olla return- lause. Tarvittaessa return- lauseita voi olla useampiakin:

	int suurempi(int a, int b)
	{
	  if ( a >= b ) return a;
	  return b;
	}

Kun return - lause tulee vastaan, lopetetaan HETI funktion suoritus. Tällöin myöhemmin olevilla lauseilla ei ole mitään merkitystä. Näin ollen useat return- lauseet ovat mielekkäitä vain ehdollisissa rakenteissa. Siis seuraavassa ei olisi mitään mieltä:

	int hopo(int a) 	:-(
	{
	  int i;
	  return 5;  /* Palauttaa aina 5!!! */
	  i = 3 + a;
	  return i+2;
	}

return- lausetta ei saa sotkea arvojen palauttamiseen osoitteen avulla. Esimerkiksi:

c-muut\funjaoso.c - sivuvaikutuksellinen funktio

	/* funjaoso.c */
	#include <stdio.h>
	
	int tupla_plus_yksi(int *pArvo)
	{
	  int vanha=*pArvo;     /* Alkuperäinen arvo talteen              */
	  *pArvo = *pArvo + 1;  /* Kutsun muuttuja muuttui nyt! eli j = 4 */
	  return 2*vanha;       /* Arvo palautui nimessä nyt!   eli i = 6 */
	}
	
	int main(void)
	{
	  int i,j=3;
	  i = tupla_plus_yksi(&j);
	  printf("i = %d, j = %d\n",i,j);
	  return 0;
	} 

Tehtävä 8.63 Funktio ja osoitin

Mitä pääohjelma funjaoso tulostaisi jos aliohjelma olisikin ollut:
	int tupla_plus_yksi(int *pArvo)
	{
	  *pArvo = *pArvo + 1;  
	  return 2**pArvo;     
	}

Tehtävä 8.64 Funktio ja referenssi

Kirjoita edellisestä tehtävästä molemmista tupla_plus_yksi - versioista viitemuuttujia käyttävä versio!

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys