C11 6.3.2.3/6任何指针类型都可以转换为整数类型。除了前面指定的,结果是实现定义的。如果结果不能用整数类型表示,则行为是未定义的。结果不需要在任何整数类型的值的范围内。
上面的引文说,如果一个指针表达式的值在转换为整型后可以用整型表示,那么就可以转换它。但是有一些东西让我很困扰。我看了标准,但是我找不到指针到整型的转换是如何发生的。
假设我们有一个指针对象,其纯二进制解释等于0x100。如果我们将其转换为具有足够精度的无符号整数,是否可以说,由于标准,转换后表达式的值将等于0x100?
或者让我这样说吧,关于指针对象在内存中的表示方式,是否有一个约定?
1条答案
按热度按时间np8igboo1#
正如您引用的文本所述,结果是 * 实现定义的 *。
未指定的行为,其中每个实现记录了如何做出选择。
因此,需要使用C实现(主要是编译器)来记录结果是如何确定的。
在使用“扁平”虚拟地址空间的实现中,在一定范围内的每个位模式代表一个地址,通常只需将这些位重新解释为二进制数字。因此,地址1 0000 0000将被转换为数字256。
然而,具有某种形式的基址和偏移量或段和偏移量寻址的实现可能形成一个整数,其中基址在某些位中,偏移量在另一位中,并且存在其它可能性。