3.1k views

What is printed by the following C program?

int f(int x, int *py, int **ppz)
{
int y, z;
**ppz += 1; z = **ppz;		 // corrected z = *ppz; to z = **ppz;
*py += 2; y = *py;
x += 3;
return x+y+z;
}

void main()
{
int c, *b, **a;
c = 4; b = &c; a = &b;
printf("%d", f(c, b, a));

}
1. $18$
2. $19$
3. $21$
4. $22$
edited | 3.1k views
0

Mistake is there.

0
that also has mistake rt?
0
yes

Return $x+y+z =$ return $7 + 7 + 5 =$ return $19$

So, option B $= 19$ is correct.

edited
0
good explanation
–2
on execution of "x+=3;" the value returned should be 10+7+5=22.
x being an integer.
+3
X is  just a local variable of f, it is not same as C,( call by value) while calling the function f , c's value was passed to it, that's it.  Any changes to C's ( using its pointer variable)vàlue will not effect X 's value..
0
The main point to be careful above code is X=X+3, not X= *X+3
0
Can anyone explain the difference between f(c,b,a) & f(c,&b,&a).

Becuase in question it is pass by value i.e

f(c,b,a). How the actual argument is changing with out passing the address of the actual argument.
0
x is passed by value

so x's value should be 4  and answer should be 16 right?
0
I also want to know.. did you get a reason?

z = *ppz is a typo and it must be z = **ppz;

$**ppz+=1; \text{ modifies the value of c to 5. }\therefore \text{ z=5.}\\ **py+=2; \text{ modifies the value of c to 7. }\therefore \text{ y=7.}\\ \text{ But x will be called as x=4, }\therefore \text{ x=7.}\\ \text{Answer: 7+7+5=19.}$

0
it will be *py ...
+1 vote
+1 vote

0
Its really appriciatable
z = *ppz Shouldn't be z = **ppz ??
+5

Yes. But you can't complain so in GATE. GATE takers are expected to apply logic to correct the questions since GATE 2013. Never say "mistake" in question paper- they are made by experts.

http://gate.iitm.ac.in/gateqps/2008/cs.pdf

0
So Sir. we are supposed to correct the question paper and apply the logic ?
+1
They happen rarely and this one is most stupid mistake. Everyone can point out it.
+1
yes. And this year they have answer scrutiny. So, if you find any question wrong do not bother to spend time on it- but question wrong is extremely rare so do not count too much on this.
0
if there is any mistake in the question marks are awarded to everyone right

1
2