This question is supposed to involve many concepts.
- In C both struct and union are used for collection of objects. But the difference is, in union we are supposed to use only one of them at a time. i.e., suppose we have 2 data objects - say int and a char, then it allocates memory only for int, and uses the same for char. So, at any time, we cannot use both the items but only one.
Now, coming to S1, it is FALSE. Both struct and union will be having same size for a single object. Only with multiple objects, struct will have more size.
For S2, it is true. Because an array - be of any object- will just multiply the memory requirement of a single object. This statement is not asking for structure padding, which happens inside a single structure object. Here arr is an array and hence arr is an array of arrays.
In structure padding, size of a single struct object is increased by adding padding bits to ensure proper alignment with the architecture causing an increase in size compared to the sum of sizes of the individual components.