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

Why we can't assign value to pointer

本文关键字:指针 赋值 不能 我们 为什么      更新时间:2023-10-16

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

int *ptr=7ffff3a9ae94;

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

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

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

为什么这个限制在c++中实现?

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

注意:这个问题有类似的标题,但它没有提供我的问题的答案。

没有这样的规则,这:

int *ptr=(int*)0x7ffff3a9ae94;

运行良好。尽管……是件坏事。

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