Node:Arrays as Parameters, Next:Questions for Chapter 14, Previous:Initializing arrays, Up:Arrays
There will be times when you want to pass an array as a parameter to a function. (For example, you might want to pass an array of numbers to a function that will sort them.)
In the following example, notice how the array my_array
in
main
is passed to the function multiply
as an actual
parameter with the name my_array
, but that the formal parameter
in the multiply
function is defined as int *the_array
:
that is, an integer pointer. This is the basis for much that you will
hear spoken about the "equivalence of pointers and arrays" -- much
that is best ignored until you have more C programming experience. The
important thing to understand is that arrays passed as parameters are
considered to be pointers by the functions receiving them. Therefore,
they are always variable parameters, which means that other functions
can modify the original copy of the variable, just as the function
multiply
does with the array my_array
below.
(See Parameters.)
#include <stdio.h> void multiply (int *, int); int main() { int index; int my_array[5] = {0, 1, 2, 3, 4}; multiply (my_array, 2); for (index = 0; index < 5; index++) printf("%d ", my_array[index]); printf("\n\n"); return 0; } void multiply (int *the_array, int multiplier) { int index; for (index = 0; index < 5; index++) the_array[index] *= multiplier; }
Even though the function multiply
is declared void
and
therefore does not return a result, it can still modify my_array
directly, because it is a variable parameter. Therefore, the result of
the program above is as follows:
0 2 4 6 8
If you find the interchangeability of arrays and pointers as formal
parameters in function declarations to be confusing, you can always
avoid the use of pointers, and declare formal parameters to be arrays, as
in the new version of the multiply
function below. The result is
the same.
void multiply (int the_array[], int multiplier) { int index; for (index = 0; index < 5; index++) the_array[index] *= multiplier; }