Node:Value parameters, Next:Actual parameters and formal parameters, Previous:Parameters in function prototypes, Up:Parameters
When you are passing data to a function by value, the parameters in the
function you are passing the data to contain copies of the data
in the parameters you are passing the data with. Let us modify
the function main
from the last example slightly:
int main() { int bill; int fred = 25; int frank = 32; int franny = 27; bill = calculate_bill (fred, frank, franny); fred = 20000; frank = 50000; franny = 20000; printf("The total bill comes to $%d.00.\n", bill); exit (0); }
As far as the function calculate_bill
is concerned, fred
,
frank
, and franny
are still 25, 32, and 27 respectively.
Changing their values to extortionate sums after passing them to
calculate_bill
does nothing; calculate_bill
has already
created local copies of the parameters, called diner1
,
diner2
, and diner3
containing the earlier values.
Important: Even if we named the parameters in the definition of
calculate_bill
to match the parameters of the function
call in main
(see example below), the result would be the same:
main
would print out $84.00
, not $90000.00
. When
passing data by value, the parameters in the function call and the
parameters in the function definition (which are only copies of the
parameters in the function call) are completely separate.
Just to remind you, this is the calculate_bill
function:
int calculate_bill (int fred, int frank, int franny) { int total; total = fred + frank + franny; return total; }