整数值的空指针

问题描述 投票:0回答:1

表达式

(void*)0
称为空指针。 但以下怎么样:

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

s
也是空指针吗? C 语言标准规定:

6.3.2.3 指针

3 值为 0 的整型常量表达式,这样的表达式 强制转换为 void * 类型,或者将预定义常量 nullptr 称为 a 空指针常量70)。如果空指针常量或值 类型 nullptr_t (必然是值 nullptr)被转换 对于指针类型,结果指针(称为空指针)是 保证与任何对象或函数的指针比较不相等。

4 将空指针转换为另一种指针类型会产生空值 该类型的指针。任意两个空指针比较相等。

5 安 整数可以转换为任何指针类型。除了之前的情况 指定的,结果是实现定义的,可能不是 正确对齐,可能不指向引用的实体 类型,并且在存储时可能会产生不确定的表示 进入一个物体。71)

根据这个

s
不会是一个空指针?

c standards null-pointer nullptr
1个回答
0
投票

是的,s 是一个空指针。因为 (void*)i 等于 (void *)0,它是一个空指针。你可以这样检查:

gsm@fc:~/tmp$ gcc -std=c89 a.c
a.c: 在函数‘main’中:
a.c:6:15: 警告:将一个整数转换为大小不同的指针 [-Wint-to-pointer-cast]
    6 |     void* s = (void*)i;
      |               ^
gsm@fc:~/tmp$ ./a.out 
s is null-pointer
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.