Of course, functions can call functions, and pass pointer values along. What does the following code write to the monitor?
#include <stdio.h> void functionB( int *y ) { printf(" *y=%d\n", *y ); *y = 999; printf(" *y=%d\n", *y ); } void functionA( int *x ) { printf(" *x=%d\n", *x ); functionB( x ); /* Note this!! */ printf(" *x=%d\n", *x ); } void main ( void ) { int a = 77; printf("a=%d\n", a ); functionA( &a ); printf("a=%d\n", a ); }
main()
calls functionA
with a pointer to a
:
functionA( &a )
functionA
then follows this pointer (now contained
in its parameter x
) and prints the contents of what it points
to.
printf(" *x=%d\n", *x )
Then functionA
calls functionB
with the value in x
:
functionB( x )
Bugs and more bugs! Look carefully. The parameter x
contains a pointer to a
. This value is what we want to pass
on, and the call functionB( x )
does this. The
call
functionB( &x )
would pass a pointer to x
(not what we want). The call
functionB( *x )
would pass the value in a
, 77, which also would
be wrong.
The call functionB(x)
copies the value in x
into the parameter y
of the function. The function
now has a pointer to a
. When functionB
executes
printf(" *y=%d\n", *y )
it follows y
and prints out what it points to. Next the function
executes
*y = 999
which follows the pointer in y
and stores 999 in the variable
a.