2013-07-14 123 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

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