already solved

18 votes

Consider the following function implemented in C:

void printxy(int x, int y) { int *ptr; x=0; ptr=&x; y=*ptr; *ptr=1; printf(“%d, %d”, x, y); }

The output of invoking $printxy(1,1)$ is:

- $0, 0$
- $0, 1$
- $1, 0$
- $1, 1$

30 votes

Best answer

At first in loop we are giving $x=0$ then $ptr$ is pointing to $X$.

So, $*ptr=0$

Now, we copying the value of $ptr$ to $y$ ,so $Y=0$

x=0; //value of x = 0ptr= &x; // ptr points to variable x y= *ptr; // Y contain value pointed by ptr i.e. x= 0;

Now, value of $ptr$ is changed to $1$. so the location of $X$ itself got modified

*ptr=1;

As it is pointing to $x$ so $x$ will also be changed to $1$

So, $1,0$ will be the value

**C** is correct answer here.

7 votes

we got x= 1 and y= 1;void printxy(int x, int y) { int *ptr; //pointer is createdwhich contain integer value. x=0; //value of x = 0 here.ptr= &x; //ptr point to variablewhich has 0 y= *ptr; // y contain value pointed by ptr i.e. x= 0; *ptr=1; // value pointer by ptr is now set to 1 i.e. x= 1; printf("%d,%d",x,y); //print x,y = x= 1 y=0

**}**

**C is answer**

2 votes

Here's the code with a full explanation.

void printxy(int x, int y) { int *ptr; x=0; /*The value of x is now 0.*/ ptr=&x; /*Assigning the address of x to ptr. It means ptr points to the address of x. So *ptr=0 as x = 0. */ y=*ptr; /*Assigning the value that the ptr holds, to y y=0 as *ptr=0. */ *ptr=1; /*Assigning 1 to the value that the ptr holds. It means x=*ptr=1 as ptr points to the address of x. So the value of x is now 1. */ /*Therefore, x=1 and y=0 now */ printf(“%d, %d”, x, y); /*It will give the output as 1, 0 */ }

Note that the function will print the same value no matter what the parameters are passed into it.

So the correct answer is **C**.