|
Example program that illistrated this fact:
struct BankAccount { int accNum; double balance; }; void update( struct BankAccount x ) { printf("Before update: x.accNum = %d x.balance = %f\n", x.accNum, x.balance); x.accNum = 1001; // Update parameter x.balance = 999999; // variable printf("AFTER update: x.accNum = %d x.balance = %f\n", x.accNum, x.balance); } int main(int argc, char *argv[]) { struct BankAccount a; a.accNum = 123; a.balance = 1000.0; printf("Before calling update: a.accNum = %d a.balance = %f\n", a.accNum, a.balance); update (a); // Demonstrate that struct is // passed-by-value printf("AFTER calling update: a.accNum = %d a.balance = %f\n", a.accNum, a.balance); } |
Result:
Before calling update: a.accNum = 123 a.balance = 1000.000000 Before update: x.accNum = 123 x.balance = 1000.000000 AFTER update: x.accNum = 1001 x.balance = 999999.000000 AFTER calling update: a.accNum = 123 a.balance = 1000.000000 (unchanged - passed-by-value) |
How to run the program:
|
void update( double *x ) { printf("Before update: x = %lf\n", *x); *x = 1001; // *x is an alias for the ACTUAL parameter printf("AFTER update: x = %lf\n", *x); } int main(int argc, char *argv[]) { double a; a = 4; printf("Before calling update: a = %lf\n", a); update ( &a ); // Pass the address of a, Simulate passed-by-reference printf("AFTER calling update: a = %lf\n", a); } |
|
I will illistrate this using the struct BankAccount type.
struct BankAccount { int accNum; double balance; }; void update( struct BankAccount *x ) { printf("Before update: (*x).accNum = %d x->balance = %f\n", (*x).accNum, x->balance); (*x).accNum = 1001; // (*x).accNum is same as: x->accNum x->balance = 999999; // x->balance is sname as: (*x).balance printf("AFTER update: (*x).accNum = %d x->balance = %f\n", (*x).accNum, x->balance); } int main(int argc, char *argv[]) { struct BankAccount a; a.accNum = 123; a.balance = 1000.0; printf("Before calling update: a.accNum = %d a.balance = %f\n", a.accNum, a.balance); update ( &a ); // Pass the ADDRESS of the struct variable ! printf("AFTER calling update: a.accNum = %d a.balance = %f\n", a.accNum, a.balance); } |
Result:
Before calling update: a.accNum = 123 a.balance = 1000.000000 Before update: (*x).accNum = 123 x->balance = 1000.000000 AFTER update: (*x).accNum = 1001 x->balance = 999999.000000 AFTER calling update: a.accNum = 1001 a.balance = 999999.000000 (CHANGED !) |
How to run the program:
|