Functions Pass by Value Pass by Reference IC 210
Arguments vs. Parameters Arguments: 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” 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; } 5 ?
X results y 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; }
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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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 Call by reference: “Getting the original” int TripleIt (int&); // Prototype int 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&); // Prototype int 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&); // Prototype int 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