You are here

Overview

11 February, 2015 - 10:45

When we pass parameters to functions we usually pass by value; that is the calling function provides several values to the called function as needed. The called function takes these values which have local scope and stores them on the stack using them as needed for whatever processing the functions accomplishes. This is the preferred method when calling user defined specific task functions. The called function passes back a single value as the return item if needed. This has the advantage of a closed communications model with everything being neatly passed in as values and any needed item returned back as a parameter.

By necessity there are two exceptions to this closed communications model:

  1. When we need more than one item of information returned by the function
  2. When a copy of an argument cannot reasonably or correctly be made (example: file stream objects).

These exceptions are handled by parameter passing by reference instead of passing a value. The item passed is called a reference variable and it represents a concept of an alias for the variable. Any change made to the reference variable is actually performed on the variable that it represents. The symbol of the ampersand is used to designate the reference variable (and it is associated with the address operator).

Example 22.1: parameter passing by reference

// prototype void process values(int qty dimes, int qty quarters, double &value dimes, double &value quarters); 

// variable definitions int dimes = 45; int quarters = 33; double value dimes; double value quarters; 

// somewhere in the function main process values(dimes, quarters, value dimes, value quarters); 

// definition of the function void process values(int qty dimes, int qty quarters, double &value dimes, double &value quarters); 
  {   value dimes = dimes * 0.l0;   value quarters = quarters * 0.25;   } 
Note: The ampersand must appear in both the prototype and the function definition but it does not appear in the function call.

The above example shows the basic mechanics of parameter passing by reference. You should study the demonstration program in conjunction with this module.