为什么我们不能为指针赋值

时间:2015-06-08 13:58:32

标签: c++ pointers

内存地址通常以0x7ffff3a9ae94等十六进制格式显示。为什么我们不能直接将这些值分配给指针?

int *ptr=7ffff3a9ae94;

A"类似"当我尝试这个时显示了行为。(这可能是一个单独的问题本身)

int i=0;
*ptr=&i;
&i=ptr;

两种情况都显示g++ 4.7.2上的语法错误,我认为这意味着它是一种语言限制。

为什么在C ++中实现此限制?

或者这是某种操作系统限制吗?

注意:This问题的标题相似,但它并没有为我提供问题的答案。

1 个答案:

答案 0 :(得分:2)

没有这样的规则,这个:

int *ptr=(int*)0x7ffff3a9ae94;

编译好。 虽然这对你来说是件坏事。

有趣的事实:你可以将指针转换为整数,反之亦然,这是在C ++中讨论垃圾收集器的最大障碍之一。你可以(尽管它是愚蠢的)在一些外部缓冲区中序列化内存地址,然后将其重新分配给某个指针。 GC可能会认为它可以删除变量,因为现在其他人指向它 - 而指针仍然是“有效”并且将来会在某处取消引用