Tracing through E01, question 9 – step 1 // p02.cc P. Conrad, for CISC181 07S // Exam question for...
-
Upload
vernon-daniels -
Category
Documents
-
view
212 -
download
0
Transcript of Tracing through E01, question 9 – step 1 // p02.cc P. Conrad, for CISC181 07S // Exam question for...
Tracing through E01, question 9 – step 1// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main
Tracing through E01, question 9 – step 2// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main
7k
Tracing through E01, question 9 – step 3// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7k
mysteryFunction()
Tracing through E01, question 9 – step 4// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7k
mysteryFunction()
x
The address of k is copied into xSince an address is a pointer,and a pointer is an address,x now points to k.
Tracing through E01, question 9 – step 5// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7k
mysteryFunction()
x
result
Tracing through E01, question 9 – step 6// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7k
mysteryFunction()
x
7result
(*x) means dereference the pointer xto go to what it points to. That is, k.
Since (*x) is really k, the value of k,which is 7, gets copied into result.
Tracing through E01, question 9 – step 7// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7k
mysteryFunction()
x
7 21result
result gets multiplied by 3,and 7 changes to 21
Tracing through E01, question 9 – step 8// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
7 21k
mysteryFunction()
x
21result
Now, (*x) is on the left hand side. (*x) dereferences the pointer x, follows the arrow to what is pointed to,which is k.
So (*x) on the left hand side,really means that we are assigning a new value to k.
Tracing through E01, question 9 – step 9// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
21k
mysteryFunction()
x
21result
When we reach the end of the function,the call frame, and all of its local variablesare popped off of the stack, and they go away.
Tracing through E01, question 9 – step 10// p02.cc P. Conrad, for CISC181 07S // Exam question for E01 #include <iostream> using namespace std; void mysteryFunction(int *x); int main() { int k = 7; mysteryFunction(&k); cout << k << endl; return 0; }
void mysteryFunction(int *x) { int result; result = (*x); result = result * 3; (*x) = result; }
main()
21k
We have returned from the function,and we print the answer, 21.