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.
Bhoomika Maheshwari said:
7 years ago
Considering all above statements as true:
Complete explanation is;
Initially, a=0, b=1, c=3
Then next statement *((a) ? &b : &a) = a ? b : c; means
(i) due to "=" operator RHS is evaluated first which means
if (a)=true then printf {b}; else printf {c};
As a = 0 (which means condition is false as 0 represent false and 1 represent true)
(ii) evaluating LHS as (a)=true then printf {&b}; else printf {&c};
Similarly a= 0 i.e. false.
(iii) now the condition becomes
*(&a)=c;
as * and & operator are compliment to each other therefore, they cancel each other and it become;
a= 3 (value of c is assigned instead writing c).
Now printf("%d, %d, %d\n", a, b, c);
Become 3, 1, 3 as the output,
Thanks.
Complete explanation is;
Initially, a=0, b=1, c=3
Then next statement *((a) ? &b : &a) = a ? b : c; means
(i) due to "=" operator RHS is evaluated first which means
if (a)=true then printf {b}; else printf {c};
As a = 0 (which means condition is false as 0 represent false and 1 represent true)
(ii) evaluating LHS as (a)=true then printf {&b}; else printf {&c};
Similarly a= 0 i.e. false.
(iii) now the condition becomes
*(&a)=c;
as * and & operator are compliment to each other therefore, they cancel each other and it become;
a= 3 (value of c is assigned instead writing c).
Now printf("%d, %d, %d\n", a, b, c);
Become 3, 1, 3 as the output,
Thanks.
(7)
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)
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.
Ajay joshi said:
4 years ago
@All.
It's still not clear can someone tell me why the answer changes if i switch the value of 'a' to some other number than 0?
And also explain the use of ternary operator.
It's still not clear can someone tell me why the answer changes if i switch the value of 'a' to some other number than 0?
And also explain the use of ternary operator.
(2)
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.
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.
Sandeep said:
8 years ago
How to solve nested conditional operator?
Right to Left (or) Left to Right?
Right to Left (or) Left to Right?
Nani said:
1 decade ago
In step2 *& gives value so that c value is assigned to a variable.
Teju said:
8 years ago
@Sanjoy.
How is this *(&a)=3?
a = 0 right
Explain it.
How is this *(&a)=3?
a = 0 right
Explain it.
Pavan said:
1 decade ago
How can you say conditional operator is true are false?
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers