C Programming - Control Instructions - Discussion
Discussion Forum : Control Instructions - Find Output of Program (Q.No. 10)
10.
What will be the output of the program?
#include<stdio.h>
int main()
{
int a=0, b=1, c=3;
*((a) ? &b : &a) = a ? b : c;
printf("%d, %d, %d\n", a, b, c);
return 0;
}
Answer: Option
Explanation:
Step 1: int a=0, b=1, c=3; here variable a, b, and c are declared as integer type and initialized to 0, 1, 3 respectively.
Step 2: *((a) ? &b : &a) = a ? b : c; The right side of the expression(a?b:c) becomes (0?1:3). Hence it return the value '3'.
The left side of the expression *((a) ? &b : &a) becomes *((0) ? &b : &a). Hence this contains the address of the variable a *(&a).
Step 3: *((a) ? &b : &a) = a ? b : c; Finally this statement becomes *(&a)=3. Hence the variable a has the value '3'.
Step 4: printf("%d, %d, %d\n", a, b, c); It prints "3, 1, 3".
Discussion:
19 comments Page 1 of 2.
Deepa said:
1 decade ago
I can't understand step2.
Nani said:
1 decade ago
In step2 *& gives value so that c value is assigned to a variable.
Srinu said:
1 decade ago
Can any one explain.
Rupinderjit said:
1 decade ago
* and & are compliment to each other.so they cancelled each other and a is left which assign value 3.
Since,=has right to left associativity so right side expression will get execute first gives 3.
Tehn comes to left side and we get a.
So a==3 ultimately.So do the answer.
Since,=has right to left associativity so right side expression will get execute first gives 3.
Tehn comes to left side and we get a.
So a==3 ultimately.So do the answer.
Avinash said:
1 decade ago
Can anyone explain this programm clearly ?
Sanjoy said:
1 decade ago
Step 2:
*((a) ? &b : &a) = a ? b : c;
R.H.S - a ? b:c; is a conditional expression where true would mean the first value (b) and false would give the other value(c)
Now, value of a=0 which means the expression before the ternary operator (?) would be false so the answer would be c(i.e 3).
L.H.S - *((a) ? &b : &a) First of all this is a pointer.
Secondly it contains a conditional expression again.
Expression - (a) ? &b : &a
where a=0(false) so the answer would be &a
Now, the expression turns to *(&a)
A pointer which says the variable at the address &a(which would be a itself) has the value as same as R.H.S.
So,*(&a)=3
or a=3
*((a) ? &b : &a) = a ? b : c;
R.H.S - a ? b:c; is a conditional expression where true would mean the first value (b) and false would give the other value(c)
Now, value of a=0 which means the expression before the ternary operator (?) would be false so the answer would be c(i.e 3).
L.H.S - *((a) ? &b : &a) First of all this is a pointer.
Secondly it contains a conditional expression again.
Expression - (a) ? &b : &a
where a=0(false) so the answer would be &a
Now, the expression turns to *(&a)
A pointer which says the variable at the address &a(which would be a itself) has the value as same as R.H.S.
So,*(&a)=3
or a=3
(1)
SMV said:
1 decade ago
I guess in c compiler, doesn't allow to write any expression on left side of assignment, it will throw a error saying that.
L value is required in function main.
L value is required in function main.
Pavan said:
1 decade ago
How can you say conditional operator is true are false?
Ricardo said:
1 decade ago
@Pavan.
In C true is represented by any numeric value not equal to 0 and false is represented by 0.
In the example above a = 0, therefore, the condition is false.
In C true is represented by any numeric value not equal to 0 and false is represented by 0.
In the example above a = 0, therefore, the condition is false.
Mohana Priya said:
1 decade ago
Thanks for nice explanation.
(1)
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers