1 / 13

Passing Data - by Reference

Address operator. 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 of base. address of height. c. 5.0.

rmaker
Download Presentation

Passing Data - by Reference

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Addressoperator Passing Data - by Reference • Syntax • double Pythagorus(double &, double &); • Pythagorus(height, base); • double Pythagorus(double& a,double& b) function prototype function call function definition

  2. address of base addressof height c 5.0 Passing Data by-reference Example • 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; • } * *

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

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

  5. 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 • }

  6. a c b sum product 7 9 5 ? ? 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--; • } 21 315 8 8 6 7 5 9  sum  product

  7. 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 8tot and sum refer to the same addressproduct and multiply refer to the same address *

  8. 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; • }

  9. 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).

  10. 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?

  11. Data Type Mismatch • value parametersimplicit 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 * *

  12. A Comparison • formal actual • parameter is parameter may be • value variable, constant, or expression type coercion may take place • reference variable only • of exact same type as formal

  13. 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 deallocated 3. transfer of control * *

More Related