CS210 Lab: Recursion Prelab Answers


Prelab Answers:

  1. Given the following piece of code, why aren't a and b exchanged after the call to exchange? (How could you modify the code?)
    void exchange(int, int);
    
    int main
    {
        int a=5,b=7;
       
        exchange(a,b);
    }
    
    void exchange (int x, int y)
    {
       int temp;
    
       temp = x;
       x = y;
       y = temp;
       return;
    } // end exchange
    
    In the above code, you are passing by value. This means that x and y are a copy of the arguments sent to this function. Instead, you want to use pass by reference, so that x and y refer to the same memory location as the arguments and thus, modify the contents at that address. To pass by reference, you can change the function header to the following:
    void exchange (int& x, int& y)
    
  2. What is the difference between ClearPtr and ClearPtr2 in the following code? Will both pointer and pointer2 be set to 0 after the calls to ClearPtr and ClearPtr2. Why/Why not?
    #include<iostream>
    using namespace std;
    
    void ClearPtr(int *&p);
    void ClearPtr2(int *p2);
    
    int main()
    {
    	int x=5, x2=6;
    	int *pointer, *pointer2;
    	
    	pointer=&x;
    	pointer2=&x2;
    	
    	cout << "x is: " << *pointer << endl;
    	cout << "pointer is holding address: " << pointer << endl;
    	cout << endl;
    	cout << "x2 is: " << *pointer2 << endl;
    	cout << "pointer2 is holding address: " << pointer2 << endl;
    	cout << endl;
    
    	ClearPtr(pointer);
    	ClearPtr2(pointer2);
    
    	cout <<"pointer is holding address: " << pointer << endl;
    	cout <<"pointer2 is holding address: " << pointer2 << endl;
    	
    
    	return 0;
    }
    
    void ClearPtr(int *& p)
    {
    	p=0;
    }
    
    void ClearPtr2(int *p2)
    {
    	p2=0;
    }
    
    Try running this code.
    In fact, pointer will be set to zero, but not pointer2.
    The difference is in the "&", in void ClearPtr(int *& p) function. This means that you are passing by reference rather than by value.

    The thing to remember about pass by reference is if you modify the value p, it will be remembered in "main".

    Back to Exercise click here


    Back to Recursion Lab click here