2013-07-14 84 views
-9

我有这个代码给出了一个指针的地址并打印它,但为什么不起作用?C指针和更改地址

void main() 
{ 
int *b = (int*) 32; 
printf("%d\n",b[0]); 
} 
+4

它不起作用? –

+2

我运行了代码,它格式化了我的硬盘。 – Thomas

+0

我投票结束 - 我不知道什么“不起作用”的意思。 –

回答

4

b[0]解除引用指向您尚未分配的内存的数组。这样做的影响是不确定的。如果地址32不能从您的流程读取,您可能会收到返回的值或程序可能崩溃。

+0

如何让它可读?我想读 –

+0

它的平台依赖。如果操作系统决定地址不可读,那么你就无能为力。为什么你想在内存中读取这个特定的位置?或者你想打印b的地址而不是它指向的地址 – simonc

0
int *b = (int*) 32; 

上面的代码中的内存地址32分配给这个指针,我不认为这是你想要的,当你调用printf你会得到拒绝访问错误, 希望下面的代码是非常有用的通宇

int a = 32; 
int *b = &a; 
printf("%d\n",b[0]); 
//output 32 

printf("%d\n", &b); 
// output b pointer address. 
+2

最后一个应该是'%p'。 – Thomas

+1

除了最后一个是%p,我预计打算打印'b'而不是'&b'。 – mah

+0

如果你想改变地址,我想改变地址,而不是打印地址 –