将指针指向变量地址和明确指定给内存地址有什么区别?

时间:2014-09-13 18:47:27

标签: c++ pointers

请参阅以下代码:

#include<iostream>
using namespace std;

int main()
{
    int a=10;
    int *p=&a;
    *(p+1)=6;
    cout<<*(p+1);
}

上面的代码不起作用。但是,下面的一段代码(分配给显式内存地址)确实有效:

#include<iostream>
using namespace std;

int main()
{

    int *p=(int *)0x28fefc;
    *(p+1)=6;
    cout<<*(p+1);

}

为什么其中一种方法有效而另一种无效? 我在第二个计算机中使用了计算机的内存地址。这个地址可能在其他机器上不起作用。

1 个答案:

答案 0 :(得分:4)

这些都是未定义的行为。您正在尝试修改未分配的内存。第二个更不安全,因为你假设每次都会将a分配给该地址,这绝对不是一个安全的假设。