You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将非常量零值整数转换为void*后,结果仍为空指针吗?

空指针判定问题

已知表达式(void *)0被称为空指针,那对于以下代码:

int i = 0;
void *s = (void *)i;

变量s是否属于空指针?

根据C语言标准6.3.2.3指针章节的规定:

  1. 值为0的整数常量表达式、转换为void*类型的此类表达式,或者预定义常量nullptr被称为空指针常量⁽⁷⁰⁾。若将空指针常量或nullptr_t类型的值(必然是nullptr)转换为指针类型,得到的结果指针称为空指针,保证与任何对象或函数的指针比较都不相等。
  2. 将空指针转换为另一种指针类型会得到该类型的空指针。任意两个空指针比较结果都相等。
  3. 整数可以转换为任何指针类型。除前文规定的情况外,转换结果由实现定义,可能未正确对齐,可能未指向引用类型的实体,存储到对象中时可能产生不确定的表示⁽⁷¹⁾。

结论

变量s不属于标准定义的空指针。原因在于:i是一个整型变量,并非“值为0的整数常量表达式”,因此(void *)i不属于空指针常量。按照标准第5条的规定,这种转换的结果是实现定义的,不能保证得到的指针满足空指针的特性(比如和所有对象/函数指针比较都不相等)。

内容的提问来源于stack exchange,提问作者wimalopaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:04:49