In this post, it is cleared say that (C99 definition 6.3.2.3p3 says)
If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
But in this answer, @Joey Adams use the following macro:
#define member_size(type, member) sizeof(((type *)0)->member)
It seems that he use a null pointer to access a member (an array in this case) and he use this to know the size of a member. In the following assembly code(example from the same question), it has been already substitute by a number.
movl $255, %esi ---> printf("%lu",member_size(Parent, text));
movl $.LC0, %edi
movl $0, %eax
call printf
So it seems that it has 'accessed' the member and become the assembly code. But in the comment, he said 'it isn't actually dereferenced' and make me confused.
So my question:
when is exactly the number calculated?
why it can be accessed using a null pointer?