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;
}