|
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:
|