Node:Variable parameters, Next:Questions for Chapter 9, Previous:Pointers and initialization, Up:Pointers
Now that you know something about pointers, we can discuss variable parameters and passing by reference in more detail. (See Parameters, to refresh your memory on this topic.)
There are two main ways to return information from a function. The most
common way uses the return
command. However, return
can
only pass one value at a time back to the calling function. The second
way to return information to a function uses variable parameters.
Variable parameters ("passing by reference") enable you to pass back
an arbitrary number of values, as in the following example:
#include <stdio.h> int main(); void get_values (int *, int *); int main() { int num1, num2; get_values (&num1, &num2); printf ("num1 = %d and num2 = %d\n\n", num1, num2); return 0; } void get_values (int *num_ptr1, int *num_ptr2) { *num_ptr1 = 10; *num_ptr2 = 20; }
The output from this program reads:
num1 = 10 and num2 = 20
Note that we do use a return
command in this example -- in the
main
function. Remember, main
must always be declared of
type int
and should always return an integer
value. (See Style.)
When you use value parameters, the formal parameters (the parameters in
the function being called) are mere copies of the actual parameters (the
parameters in the function call). When you use variable parameters, on
the other hand, you are passing the addresses of the variables
themselves. Therefore, in the program above, it is not copies of the
variables num1
and num2
that are passed to
get_values
, but the addresses of their actual memory locations.
This information can be used to alter the variables directly, and to
return the new values.