【发布时间】:2020-12-04 22:43:18
【问题描述】:
C11 6.3.2.3/6 任何指针类型都可以转换为整数类型。除先前规定外, 结果是实现定义的。如果结果不能用整数类型表示, 行为未定义。结果不必在任何整数的值范围内 输入。
上面的引用说,如果指针表达式在转换为整数类型后的值可以用整数表示,则可以转换它。但是有件事困扰着我。我查看了标准,但找不到指向 int 转换的指针。
假设我们有一个指针对象,它的纯二进制解释等于 0x100。如果我们将它转换为一个足够精度的无符号整数,我们可以说转换后的表达式的值由于标准而等于0x100吗?
或者这样说,指针对象在内存中的表示方式有约定吗?
【问题讨论】:
-
the result is implementation-defined -
单内存空间,平面内存模型系统具有指向整数转换的指针,这些转换按您描述的方式工作。但是有双内存空间(哈佛架构)和分段内存模型(Intel 8086)系统,从指针到整数的转换,容我们说,更有趣。因此,C 标准故意对转换的工作原理只字不提。事实上,引用中最后一句的意思是,不需要实现来支持指针到整数的转换。