Reference Variables


When passing pointers, it can often become annoying to constantly add * to every variable whose address you're passing. And now, behold -- It's time to learn how you can pass addresses and have them seem to be a normal variable!

C++ has a special kind of variable called a reference variable. This variable must be given an variable when it's created that it can point at. However, once this is done, it acts just like a pointer; since it just points to another variable, when you change that variable, you're changing this one, and vice-versa.

So, how do we use this marvelous super-variable, you ask? Simple! This is how it's declared in a program:

int fajita;
int &beans=fajita;

void taco(double &nacho)

Notice that we declared a regular int before declaring the reference-to-int beans? The reason for this is that references variables must always be assigned a value to point at when they are declared; so, we gave it something to make a reference to. Also you may note that we don't give nacho a value when it's declared. That's ok, because we give it a value when we pass parameters to its function.

Let's put the pieces together and try using a reference variable in a program:

#include <iostream.h>

/* Improves a taco's rating */

void enhance_taco(int &taco)
{
  taco = 10; /* Mmm, tacos */
}

void main(void)
{
   int unyummytaco;
   int yummytaco;
   int &taco=yummytaco;

   unyummytaco = 1;
   yummytaco = 9;

   cout << "Yummy Taco is " << yummytaco << "\n";
   cout << "Un-Yummy Taco is " << unyummytaco << endl;
   cout << "Reference Variable Taco is " << taco << endl;

   cout << "\nRunning the Magic Taco Enhancer..\n\n";
   enhance_taco(yummytaco);
   enhance_taco(unyummytaco); 

   cout << "Yummy Taco is " << yummytaco << "\n"; 
   cout << "Un-Yummy Taco is " << unyummytaco << endl;
   cout << "Reference Variable Taco is " << taco << endl;
}

Here's what the program prints out:

Yummy Taco is 9
Un-Yummy Taco is 1
Reference Variable Taco is 9

Running the Magic Taco Enhancer..

Yummy Taco is 10
Un-Yummy Taco is 10
Reference Variable Taco is 10

Look at the output -- the reference variable has the same as the yummy taco variable! By saying "int &taco=yummytaco", you were able to create taco as a reference to yummytaco; and because of this, taco simply points at yummytaco. The end result is a variable that looks and feels just like a separate variable, but is really a pointer!

Also note how the function enhance_taco uses its argument taco just like a regular variable, yet is actually modifying the variables you passed it directly! Once again, the power of reference variables let us do this.

You may see this as markedly similar to value parameters in Pascal. It is, and if you are having troubles with pointers in C++, think of int & burrito as the same as var burrito : integer was.


Table of Contents

Parameter Passing | Passing Pointers | Passing Arrays | Reference Variables
Exercises