Passing Data - by Reference Syntax && double Pythagorus(double &, double &);...

Preview:

Citation preview

Passing Data - by ReferencePassing Data - by Reference

Syntax

double Pythagorus(double &&, double &&);

Pythagorus(height, base);

double Pythagorus(double& & a, double& & b)

function prototype

function call

function definition

Addressoperator

double Pythagorus(double &&, double &&);void main(void){ double height = 4.0, base = 3.0;

cout << “Hypotenuse = “ << Pythagorus(height, base) << endl;. . .

}

double Pythagorus(double& & a, double& & b){ double c;

c = sqrt(a*a + b*b);return c;

}

Passing Data by-reference ExamplePassing Data by-reference Example

* *

addressaddress of heightof height

address address of baseof base

5.0

c

double Pythagorus(double& & a, double& & b){ double c;

a++;b++;

c = sqrt(a*a + b*b);return c;

}

Passing Data - by ReferencePassing Data - by Reference

* * * * *

addressaddress of heightof height

address address of baseof base

back in main: cout << height;cout << base:

4.0 3.0

c

5.0 4.0

6.4

6.4

5.04.0

height base

Passing Data - by ReferencePassing Data - by Reference

In main() valuesreferenced as

1 value stored1 value stored

a

height

1 value stored1 value stored

b

base

In Pythagorus()values referenced as

*

By-Reference, Another ExampleBy-Reference, Another Example{

float a, b, c, sum, product;void calc(float, float, float, float &, float &); // prototype

cout << "Enter three numbers: ";cin >> a >> b >> c;

calc(a, b, c, sum, product); // callcout << a<<“ + “<<b<<“ + “c<<“ = " << sum;cout << ‘\n’<<a<<“ * “<<b<<“ * “c<<“ = " << product;

}

void calc(float x, float y, float z, float &tot, float& multiply){ tot = x + y + z; // definition

multiply = x * y * z;x++; y++; z--; // for demo purposes

}

Another Example: What happens?Another Example: What happens?

calc(a, b, c, sum, product);

void calc(float x, float y, float z,float &tot, float& multiply){ tot = x + y + z;

multiply = x * y * z;x++; y++; z--;

}

5 7 9 ? ?a b c sum product

5 7 9 sum product

21 315

6 8 8

Another Example: Program OutputAnother Example: Program Output

OutputEnter three numbers: 5 7 95 + 7 + 9 = 215 * 7 * 9 = 315

*

x is 6, y is 8, z is 8tot and sum refer to the same addressproduct and multiply refer to the same address

Passing Data - by ReferencePassing Data - by Referencevoid main(void){ int w = 3;

void print_val(int &); // local function prototype

cout <<"w before the function call is "<<w<<‘\n’; print_val(w);

cout <<"w after the function call is "<<w<<‘\n’;}

void print_val(int& q){ cout<<"Value passed to the function is "<<q<<endl;

q = q *2; // doubles the value of w?cout<<"Value at the end of the function is "<< q <<endl;

}

Passing Data - by ReferencePassing Data - by Reference

Output w before the function call 3

Value passed to the function is 3

Value at the end of the function is 6

w after the function call is 6

void print_val (int &q);

This function doubles the value of any (int) variable sent to it (not just w).

Swap RoutineSwap Routine

void swap(float& num1, float& num2){

float temp;

temp = num1;num1 = num2;num2 = temp;

}

What happens if we use call by-

value for the swap function?

Data Type MismatchData Type Mismatchvalue parameters

implicit type conversion - value of the actual parameter is coerced to the data type of the formal parameter

reference parameterscoercion not possible because an address is passed, not a value- types must match

* *

A ComparisonA Comparison

formal actualparameter is parameter may be

value variable, constant, or expression

type coercion may take place

reference variable onlyof exact same type as formal

What’s Happening????What’s Happening????call sequence

1. memory is allocated 2. parameters are passed3. transfer of control

return sequence

1. value of the return is stored 2. memory is deallocated3. transfer of control

* *

Recommended