内存地址通常以0x7ffff3a9ae94
等十六进制格式显示。为什么我们不能直接将这些值分配给指针?
int *ptr=7ffff3a9ae94;
A"类似"当我尝试这个时显示了行为。(这可能是一个单独的问题本身)
int i=0;
*ptr=&i;
&i=ptr;
两种情况都显示g++ 4.7.2
上的语法错误,我认为这意味着它是一种语言限制。
为什么在C ++中实现此限制?
或者这是某种操作系统限制吗?
注意:This问题的标题相似,但它并没有为我提供问题的答案。
答案 0 :(得分:2)
没有这样的规则,这个:
int *ptr=(int*)0x7ffff3a9ae94;
编译好。 虽然这对你来说是件坏事。
有趣的事实:你可以将指针转换为整数,反之亦然,这是在C ++中讨论垃圾收集器的最大障碍之一。你可以(尽管它是愚蠢的)在一些外部缓冲区中序列化内存地址,然后将其重新分配给某个指针。 GC可能会认为它可以删除变量,因为现在其他人指向它 - 而指针仍然是“有效”并且将来会在某处取消引用