2014-09-13 103 views
-7

请参见下面的代码片段:将指针指向变量地址并明确指向内存地址有什么区别?

#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); 

} 

为什么这些方法中的一个工作,而不是其他? 我在第二个地址中使用了我的电脑的内存地址。该地址可能无法在其他某台机器上使用。

+0

你是什么意思的“不工作”?怎么了? – 2014-09-13 18:50:32

+0

过程返回负值并立即终止 – user3553836 2014-09-13 18:58:11

回答

4

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

+0

@ user35538​​36未定义的行为意味着一切都有可能,但没有任何保证。因为你的电脑“工作”并不意味着它可以在别的地方工作。 – 101010 2014-09-13 18:53:22

+0

它不是“工作”,它是未定义的行为。这意味着该标准没有具体说明应该发生什么。编译器可能会让你这样做,它可能会抛出异常,它可能会使你的电脑崩溃,或者它可能无能为力。 – CoryKramer 2014-09-13 18:53:28

+0

thanx我懂了!这意味着使用任何内存我必须先借助变量声明等来分配它? – user3553836 2014-09-13 19:13:23