 Pointers and Functions Remember, functions can return only ONE value. Until now it was impossible to change two different non-array values within a function and return both values to main( ).  By Reference: We can now swap two variables, by using the addresses of the variables from within the function.  When the function reverses the values, main( ) will also recognize the changes.  #include void swap(int &num1, int &num2); int main(void) {      int a=10,bj=20;      cout<< "Before the swap, a is " << a << " and b is " << b << "."<< endl;      swap(a,b);      cout<< "After the swap, a is " << a << " and b is " << b << "."<< endl;      return 0; } //-------------- Function to reverse two values ---------------------------------------- void swap(int &num1, int &num2)    // receiving addresses not values {      int temp;     // temporary holding variable      temp = num1;      num1 = num2;      num2 = temp;      return;     // main( )'s variables, not copies of them, have been changed } By Pointers: Let's try this same swapping process using pointers instead of addresses. #include void p_swap(int *pNum1, int *pNum2); int main(void) {      int a=10, b=20;      cout<< "Before the swap, a is " << a << " and b is " << b << "."<< endl;      p_swap(&a, &b);    //pass the addresses      cout<< "After the swap, a is " << a << " and b is " << b << "."<< endl;      return 0; } //-------------- Function to reverse two values ----------------------------------------- void p_swap(int *pNum1, int *pNum2)    // receiving addresses not values {      int temp;    // temporary holding variable      temp = *pNum1;    // swap the values stored at the addresses      *pNum1 = *pNum2;      *pNum2 = temp;      return;     // main( )'s variables, not copies of them, have been changed } 