在32位C编译器上sizeof(*NULL)如何等于1?

Utk*_*wal 5 c gcc pointers

我最近了解到,这sizeof不是一个函数,实际上是在编译时进行评估.

但我仍然无法弄清楚如何sizeof(*NULL)等于1.

编辑:我在这里专门讨论gcc.

nwe*_*hof 10

这取决于编译器和标准库.使用GCC和glibc,NULL定义为(void*)0和GCC有一个扩展,允许指针void使用指针算术sizeof(void) == 1.如果没有此扩展,编译器将产生错误.

标准库也可以定义NULL0.在这种情况下sizeof(*NULL)也是非法的.