指针是否存储为整数?

Zzz*_*Zzz 6 language-agnostic pointers

是C/C++中的指针(或任何语言),整数?指针保存一个内存地址,从0到内存的上限.所以在数学术语中,指针可以被认为是非负整数.

如何将指针存储在C/C++中?还有其他流行语言?

ang*_*son 6

这里有几个隐含的问题,所以让我们理解每一个存在的问题.

首先,C/C++中的指针只是伪装成integeres?

是的,他们是,不,他们不是.首先,在实现方面,实现点的最常用方法是为平台(32位或64位)选择正确的整数大小,并将其用作可寻址内存空间的绝对地址值.

在这种情况下,你可以说指针只是整数.

但是,C/C++中的指针一直被定义为黑盒数据类型.你不应该将它们用作整数,因为它们很可能没有你所谓的"数值"上下文,这是有意义的.

当然它们看起来很数字,你可以为它们添加整数以便移过它们等等,但所有这些都是特定于实现的,没有记录的(故意的),因此不太可靠.这里"可靠"的意思是,如果将指针解释为整数,则不应该依赖于指针和整数之间存在任何有意义的关系.

对于特定平台,编译器,运行时等,您可能会发现除了被视为解决可寻址空间中特定字节的数值之外,它没有任何特殊含义的证据,但我仍然不会想到它办法.指针是黑盒子.

所以下一个问题是你是否可以重新解释将指针保存为整数的内存.嗯,是的,你当然可以这样做,但同样,你应该认为该整数的实际数值是无意义的.如果你有一个32位指针,你可以将它存储在一个32位整数,反之亦然,但整数的数值意味着,我不会给任何值.

一个特定的实现可以很好地采取这个:

p++;
Run Code Online (Sandbox Code Playgroud)

意思是这样的:

i -= sizeof(element);
Run Code Online (Sandbox Code Playgroud)

即.逆转记忆空间.我不知道任何这样的环境,计算机,运行时,编译器或其他类似的东西,但文档允许它.

这就是你应该关注的.