为什么将0转换为指针可以'访问'

时间:2014-08-02 09:12:20

标签: c pointers

在这个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

所以它似乎已经'访问'成员并成为汇编代码。但在评论中,他说“它实际上并没有被解除引用”。让我感到困惑。

所以我的问题:

  • 什么时候计算的数字正好?

  • 为什么可以使用空指针访问它?

0 个答案:

没有答案