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;
}
0, 1, 3
1, 2, 3
3, 1, 3
1, 3, 1
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.
(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.
(7)

Sandeep said:   8 years ago
How to solve nested conditional operator?

Right to Left (or) Left to Right?

Teju said:   8 years ago
@Sanjoy.

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:

Your comments will be displayed after verification.