The question shown below is an interview question:
Q) You are given/have a datatype, say X in C.
The requirement is to get the size of the datatype, without decl
This should do the trick:
#include
typedef struct
{
int i;
short j;
char c[5];
} X;
int main(void)
{
size_t size = (size_t)(((X*)0) + 1);
printf("%lu", (unsigned long)size);
return 0;
}
Explanation of size_t size = (size_t)(((X*)0) + 1);
sizeof(X)
would return 12 (0x0c
) because of alignment((X*)0)
makes a pointer of type X
pointing to memory location 0 (0x00000000)
+ 1
increments the pointer by the the size of one element of type X
, so pointing to 0x0000000c
(size_t)()
casts the address, that is given by the expression (((X*)0) + 1)
back to an integral type (size_t
)Hope that gives some insight.