Functions ----------- Pass by Value Pass by Reference IC 210.

Post on 21-Dec-2015

217 views 0 download

Tags:

transcript

Functions-----------

Pass by ValuePass by Reference

IC 210

Arguments vs. ParametersArguments:

• function call

• actual values passed to function

Parameters:

• Placeholder in function heading waiting for arguments

answer = cube (x);

double cube (double inputVal)

Argument (function call)

parameter (function heading)

What is the output?

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

??5

Call by Value

X

results

Call by value: “Sending a copy”

5

DoubleIt

?

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

Call by value: “Sending a copy”

5

?

?DoubleIt

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

Call by value: “Sending a copy”

5

?

?DoubleIt

int DoubleIt (int);int main ( ){ int x = 5;

results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

y ?

X

results

y

Call by value: “Sending a copy”

5

?

?

?X’s value is copied into Y

DoubleIt

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

y

Call by value: “Sending a copy”

5

?

?

5

DoubleIt

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

y

Call by value: “Sending a copy”

5

5

?

10

DoubleIt ?

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

y

Call by value: “Sending a copy”

10DoubleIt

10

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

5

?

X

results

y

Call by value: “Sending a copy”

5

?

DoubleIt 10

10

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

Call by value: “Sending a copy”

5

10

DoubleIt 10

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

Call by value: “Sending a copy”

5

10

DoubleIt ?

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

X

results

Call by value: “Sending a copy”

5

DoubleIt ?

10

int DoubleIt (int);int main ( ){ int x = 5;

int results = DoubleIt (x);cout << x;return 1;

}int DoubleIt (int y)} y = 2*y;return y;}

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y) // Function Definition{ int z = y;

y = 2 * y;return y + z;}

What is the output?

??14,21

Call by

Reference

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y) // Function Definition{ int z = y;

y = 2 * y;return y + z;}

Call by reference: “Getting the original”

TripleIt

x 7

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y) // Function Definition{ int z = y;

y = 2 * y;return y + z;}

results

Call by reference: “Getting the original”

TripleIt

?

x 7

results ?

?TripleIt

Call by reference: “Getting the original”

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

x 7

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

results ?

?TripleIt

Call by reference: “Getting the original”

x 7

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y) { int z = y;

y = 2 * y;return y + z;}

results

y, x

?

?

X’s address is referenced

TripleIt

Call by reference: “Getting the original”

7

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

results

y, x

?

TripleIt ?

Call by reference: “Getting the original”

z 7

7

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y) { int z = y;

y = 2 * y;return y + z;}

results

y, x

?

TripleIt ?

Call by reference: “Getting the original”

z 7

714

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

results

y, x

?TripleIt

14

?

Call by reference: “Getting the original”

z 7

21

results

y, x

?

TripleIt 21

14

Call by reference: “Getting the original”

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

z 7

_

results 21

TripleIt 21

Call by reference: “Getting the original”

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

x 14

results 21

TripleIt ?

Call by reference: “Getting the original”

int TripleIt (int&); // Prototypeint main ( ) // Function Definition{ int x = 7;

int results = TripleIt (x);cout << x << “,“ << results;return 1;

}int TripleIt (int& y){ int z = y;

y = 2 * y;return y + z;}

x 14