Detailed Print – Computer Sir Ki Class

Solved Problem!#CPP#2652

Problem Statement - output writing, pass by ref/pass by value

Write the output of the following code piece.

```		#include <iostream>
using namespace std;
void domywork(char &,char);
int main()
{
char a='#',b='@';
domywork(a,b);
cout<<a<<b;
domywork(b,a);
cout<<a<<b;
return 0;
}

void domywork(char &x,char y)
{
x=y;
y=x;
} ```

Run Output

``````@@@@
``````

Solution

char a=’#’,b=’@’; //These are initial values of a and b

domywork(a,b);
When we pass values here the value of a is passed by reference so its value is likely to be changed by the function. The moment function puts y into x. It actually puts value of b into a. So the b will remain same whatever function does to it as it is not passed by reference..

cout<<a<<b;
This will print @@ as explained above.

domywork(b,a);
Since both b and a have already become @ so the changes the function call operations will happen but they will actually not change any values.

cout<<a<<b;
So this will further print @@. So final output would be @@@@
return 0;
}

void domywork(char &x,char y)
This passes first variable by reference and second by value.
{
x=y;  Original value as passed in x will be overwritten by y
y=x;  y will be overwritten by new x but the original y will not be affected as it is passed by value.

}

Common Errors

• Such programs should be manually dry run to avoid errors.
• Student often forget that in the case of second run of the functions both the original variables are already changed.