Prev Next Up Title Contents Index

Viittaukset (viitemuuttujat, references,&)

C- kielessä muuttujaparametrit toteutetaan osoittimien avulla. Pascalissahan vastaava ilmiö saatiin aikaiseksi VAR-määrittelyllä. C++:ssa on VAR-määrittelyä vastaava viittaustapa muuttujiin: referenssimuuttujat eli viitemuuttujat.

Seuraavassa perinteinen vaihtoesimerkki- ohjelma on kirjoitettuna sekä C:llä että C++:lla:

C- versio ilman referenssimuuttujia:

swap.c - vaihto osoittimien avulla

	/* swap.c */
	#include <stdio.h>
	
	void swap(int *a, int *b)
	{
	  int t;
	  t = *a; *a = *b; *b = t;
	}
	
	int main(void)
	{
	  int x=3, y=4;
	  swap(&x,&y);
	  printf("%d %d\n",x,y);
	  return 0;
	}
C++ -versio referenssimuuttujien avulla:

swap.cpp - vaihto referenssien avulla

	/* swap.cpp */
	#include <stdio.h>
	
	void swap(int &a, int &b)
	{
	  int t;
	  t = a; a = b; b = t;
	}
	
	int main(void)
	{
	  int x=3, y=4;
	  swap(x,y);
	  printf("%d %d\n",x,y);
	  return 0;
	}
Referenssimuuttujien etuna on siis erityisesti se, että aliohjelma voidaan muuttaa toimimaan joko arvoparametreja käyttäväksi tai muuttujaparametreja käyttäväksi vain muuttamalla aliohjelman prototyypissä muuttujien tyyppiä.

Tosin osoitemuuttujaa käytettäessä kutsuja erityisesti korostaa sitä, että muuttujien arvot tulevat muuttumaan (vrt. swap(&x,&y); tai swap(x,y);)!

Myös seuraava käyttö on mahdollista, mutta sitä ei suositella:

referenc.cpp - muuttuja referenssin avulla

	/* REFERENC.CPP */
	#include <stdio.h>
	
	int main(void)
	{
	  int i=4; int &p=i;
	  p = 6;
	  printf("i=%d p=%d\n",i,p); // Tulostaa i=6 p=6
	  return 0;
	}


Prev Next Up Title Contents Index