Arguments
- Call by Value
One aspect of C functions may be unfamiliar to
programmers who are used to some other languages, particulary Fortran. In C,
all function arguments are passed ``by value.'' This means that the called
function is given the values of its arguments in temporary variables rather
than the originals. This leads to some different properties than are seen with
``call by reference'' languages like Fortran or with var parameters in Pascal,
in which the called routine has access to the original argument, not a local
copy.
Call by value is an asset, however, not a liability. It
usually leads to more compact programs with fewer extraneous variables, because
parameters can be treated as conveniently initialized local variables in the
called routine. For example, here is a version of power that makes use of this
property.
/* power: raise base to n-th power; n >= 0; version 2
*/
int power(int
base, int n)
{
int p;
for (p = 1; n >
0; --n)
p = p * base;
return p;
}
The parameter n
is used as a temporary variable, and is counted down (a for loop that runs
backwards) until it becomes zero; there is no longer a need for the variable i.
Whatever is done to n inside power has no effect on the argument that power was
originally called with.
When necessary, it is possible to arrange for a function
to modify a variable in a calling routine. The caller must provide the address
of the variable to be set (technically a pointer to the variable),
and the called function must declare the parameter to be a pointer and access
the variable indirectly through it. We will cover pointers in Pointers and Arrays.
The story is different for arrays. When the name of an
array is used as an argument, the value passed to the function is the location
or address of the beginning of the array - there is no copying of array
elements. By subscripting this value, the function can access and alter any
argument of the array. This is the topic of the next section.
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment