0

why answer is 16?

#include <stdio.h> void main() { // Write C code here long double a; signed char b; int arr[sizeof(!a+b)]; printf("%d",sizeof(arr)); } // answer is 16

2nd Mar 2021, 5:26 PM
Ravi Kumar Verma
Ravi Kumar Verma - avatar
5 Answers
+ 1
If you pass !a to sizeof(), everything I explained earlier still holds, since the type of !a is int. However, if you construct the array with sizeof( a + b ) elements, then the output changes because a + b is of type long double, not int, and sizeof( long double ) is 16 on SoloLearn's system. From then on, it applies again that for an array of 16 integers, each occupying 4 byte, the size of the total array would turn out 64.
7th Mar 2021, 10:49 AM
Shadow
Shadow - avatar
+ 6
The logical NOT operator has type int, therefore the expression !a + b is an int as well, which typically has a size of 4 byte on 64-bit systems. As a consequence, "arr" is an array of four integers, making its total size 16 byte, although the exact output depends on the size of int on the system the code is compiled on.
2nd Mar 2021, 5:42 PM
Shadow
Shadow - avatar
0
Shadow Thank you so much
7th Mar 2021, 3:56 AM
Ravi Kumar Verma
Ravi Kumar Verma - avatar
0
But I am a little confused..how is arr consist of 4 intergers. Shadow....in line 3 after main function if I pass !a the ans remains 16 but if I change the parameter to a+b the ans is 64.
7th Mar 2021, 4:01 AM
Ravi Kumar Verma
Ravi Kumar Verma - avatar
0
Shadow I get it nowđŸ€—.thanks
7th Mar 2021, 3:18 PM
Ravi Kumar Verma
Ravi Kumar Verma - avatar