void inc(int &x)
{
x = x + 1;
}
Note that the & symbol does not mean address-of. It means that
``x is a reference to an integer''. Consequently, when we see
x in subroutine inc, it means ``whatever x is
referring to.''
x does not have an integer value, it refers to one.
In the expression x = x + 1;, the right hand side says:
``evaluate the sum of 1 and the value referred to by x.'' The
left hand side says ``store the value to whatever storage referred
by x.''
Now consider the following invocation:
// before inc(z); // after
The value of z (of the caller) will increment in this case.
This is because the subroutine inc is not given the value
(or a snapshot there of) of argument z, it is given the
method to find variable z. As a result, whatever we do to
parameter x is done to argument z.
It only makes sense the the argument used to specify parameter
x must be the storage of an integer. This means that the following
invocation will result in a compiler error:
inc(z+1);
This results in an error because the expression z+1 only specifies
a value, but not a place to store an integer.
Copyright © 2006-08-28 by Tak Auyeung