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.
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)
Arun said:
5 years ago
Clear explanation, Thanks @Bhoomika Maheshwari.
(1)
Nani said:
5 years ago
Thanks for explaining @Bhoomika Maheshwari.
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)
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?
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.
RatanNarayana Gangoni said:
9 years ago
Can anyone explain this clearly?
Yashwanth said:
10 years ago
I don't understood none of explanation.
Nikhil said:
10 years ago
Suppose a = 1. What answer should be?
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