C Programming - Declarations and Initializations - Discussion
Discussion Forum : Declarations and Initializations - Find Output of Program (Q.No. 10)
10.
What is the output of the program?
#include<stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a u;
u.ch[0] = 3;
u.ch[1] = 2;
printf("%d, %d, %d\n", u.ch[0], u.ch[1], u.i);
return 0;
}
Answer: Option
Explanation:
printf("%d, %d, %d\n", u.ch[0], u.ch[1], u.i); It prints the value of u.ch[0] = 3, u.ch[1] = 2 and it prints the value of u.i means the value of entire union size.
So the output is 3, 2, 515.
Discussion:
77 comments Page 1 of 8.
Jayakumar v said:
4 years ago
Good explanation. Thanks, everyone.
Shaziya Hasan said:
5 years ago
How can we use %d for a character array? Can anyone explain?
(1)
Sumith said:
6 years ago
Why would the "i" get the entire size of union?
(2)
Mesi said:
6 years ago
What will be the result if we add one more value u.ch[2]=4?
Manjiree said:
6 years ago
Please can you explain in detail how it will calculate the entire size of the union?
(1)
Mahesh said:
6 years ago
How that I and other two char arrays are related ?
We are asked to find I and how we are relating it with other variables.
We are asked to find I and how we are relating it with other variables.
Harika said:
6 years ago
Can anyone explain the memory allocation?
Please.
Please.
Saila said:
6 years ago
Thank you @Mostafa Hamoda.
Mostafa Hamoda said:
7 years ago
Guys let's take it easy.
The function of the union is to calculate the size of each of the variable contained in it and find the biggest size of them and then create a place on memory of that size, so in this example a 4 bytes space of memory is reserved for our union, in our usage we created an object (u) which have access to our four bytes, our first assignment was to put a value of 3(u.ch[0]) in the first byte because our array is of type character so our object will deal with only the first byte and initialize the rest of them with (zeros), and the second byte with 2 (u.ch[1]) now in our memory we should have a shape like this:
00000000 00000000 00000010 00000011
(ch[1]) (ch[0])
[ ONE INTEGER].
Now, when we used our object to access the memory and deal with info side as if it were an integer.
So the value would be (1*2^0+1*2^2+1*2^9) = 515.
The function of the union is to calculate the size of each of the variable contained in it and find the biggest size of them and then create a place on memory of that size, so in this example a 4 bytes space of memory is reserved for our union, in our usage we created an object (u) which have access to our four bytes, our first assignment was to put a value of 3(u.ch[0]) in the first byte because our array is of type character so our object will deal with only the first byte and initialize the rest of them with (zeros), and the second byte with 2 (u.ch[1]) now in our memory we should have a shape like this:
00000000 00000000 00000010 00000011
(ch[1]) (ch[0])
[ ONE INTEGER].
Now, when we used our object to access the memory and deal with info side as if it were an integer.
So the value would be (1*2^0+1*2^2+1*2^9) = 515.
(3)
Ajay gupta said:
7 years ago
@All.
As explained that how it became 515 and I understood it. But why we need to calculate the size of the union while we are accessing the value of the variable I in the union u. why the size and how u, I is related to the size.
As explained that how it became 515 and I understood it. But why we need to calculate the size of the union while we are accessing the value of the variable I in the union u. why the size and how u, I is related to the size.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers