Presentation is loading. Please wait.

Presentation is loading. Please wait.

Passing Data - by Reference Syntax && double Pythagorus(double &, double &); Pythagorus(height, base); & & double Pythagorus(double& a, double& b) function.

Similar presentations


Presentation on theme: "Passing Data - by Reference Syntax && double Pythagorus(double &, double &); Pythagorus(height, base); & & double Pythagorus(double& a, double& b) function."— Presentation transcript:

1

2 Passing Data - by Reference Syntax && double Pythagorus(double &, double &); Pythagorus(height, base); & & double Pythagorus(double& a, double& b) function prototype function call function definition Address operator

3 && 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 Example * address of height address of base 5.0 c

4 & & double Pythagorus(double& a, double& b) {double c; a++; b++; c = sqrt(a*a + b*b); return c; } Passing Data - by Reference * * * * * address of height address of base back in main:cout << height; cout << base: 4.0 3.0 c 5.0 4.0 6.4 5.0 4.0 height base

5 Passing Data - by Reference In main() values referenced as 1 value stored a height 1 value stored b base In Pythagorus() values referenced as *

6 By-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); // call cout << 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 }

7 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 79 ?? a b c sumproduct 5 7 9  sum  product 21 315 6 88

8 Another Example: Program Output Output Enter three numbers: 5 7 9 5 + 7 + 9 = 21 5 * 7 * 9 = 315 * x is 6, y is 8, z is 8 tot and sum refer to the same address product and multiply refer to the same address

9 Passing Data - by Reference void 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; }

10 Passing 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).

11 Swap 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?

12 Data Type Mismatch value parameters implicit type conversion - value of the actual parameter is coerced to the data type of the formal parameter reference parameters coercion not possible because an address is passed, not a value - types must match *

13 A Comparison formalactual parameter isparameter may be valuevariable, constant, or expression type coercion may take place referencevariable only of exact same type as formal

14 What’s Happening???? call sequence 1. memory is allocated 2. parameters are passed 3. transfer of control return sequence 1. value of the return is stored 2. memory is deallocated 3. transfer of control *


Download ppt "Passing Data - by Reference Syntax && double Pythagorus(double &, double &); Pythagorus(height, base); & & double Pythagorus(double& a, double& b) function."

Similar presentations


Ads by Google