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

标签 c pointers gcc

我最近了解到 sizeof 不是一个函数,它实际上是在编译时计算的。

但是我还是没弄明白sizeof(*NULL)是怎么等于1的。

编辑:我在这里专门谈论 gcc。

最佳答案

这取决于编译器和标准库。对于 GCC 和 glibc,NULL 被定义为 (void*)0 并且 GCC 有 an extension允许使用 sizeof(void) == 1void 指针进行指针运算。如果没有此扩展,编译器会产生错误。

标准库也可以将 NULL 定义为 0。在这种情况下,sizeof(*NULL) 也是非法的。

关于c - 在 32 位 C 编译器上,sizeof(*NULL) 如何等于 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541459/

相关文章:

c++ - gcc 是否以代数方式优化 c++ 代码,如果是,优化到什么程度?

c - 如何获取 int 的低 8 位?

c - C中的递归,需要一些解释

c - 释放被覆盖的指针

gcc-4.7 配置后缀安装

c - 禁用 SSE 的 SSE 寄存器返回

c - typedef 函数指针类型

c - 在 C 程序中获取 MX 记录

c++ - 正在释放的指针未分配?

c - 指向行为异常的函数的指针