在这个post中,它被清除(C99定义6.3.2.3p3说)
如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较。
但是在这个answer中,@ Joe Adams使用以下宏:
#define member_size(type, member) sizeof(((type *)0)->member)
似乎他使用空指针来访问成员(在这种情况下是一个数组),并使用它来了解成员的大小。在以下汇编代码中(来自同一question的示例),它已经被数字替代。
movl $255, %esi ---> printf("%lu",member_size(Parent, text));
movl $.LC0, %edi
movl $0, %eax
call printf
所以它似乎已经'访问'成员并成为汇编代码。但在评论中,他说“它实际上并没有被解除引用”。让我感到困惑。
所以我的问题:
什么时候计算的数字正好?
为什么可以使用空指针访问它?