2012-07-27 77 views
2

我有以下代碼:指針二維數組

int arr[2][2][2]={10,3,4,5,6,7,8,9}; 
int *p; 
printf("%u",arr); 
p=(int *)arr; 
printf("%u",p); 

,輸出

64166 
64164 

不過,我倒覺得parr指向相同的內存地址。爲什麼顯示不同的地址?

+4

第一個打印輸出打印一個未初始化的值。 – dasblinkenlight 2012-07-27 12:26:31

+1

我跑了同一段代碼,結果是:3216608828,3216608828! – Rsh 2012-07-27 13:09:02

+0

清除懷疑的問題... – ghostrider 2012-07-27 13:15:07

回答

2

但相同的代碼

#include <stdio.h> 

    int main() 
    { 

     int arr[2][2][2]={10,3,4,5,6,7,8,9}; 
     int *p; 
     printf("\n%u",arr); 
     p=(int *)arr; 
     printf("\n%u\n",p); 
     return 0; 
    } 

只給出了相同的結果。

enter image description here

2

讓我們通過代碼

int *p; 
printf("%u",p); 

p是一個未初始化INT指針。它將打印出內存中的任何內容。

p=(int *)arr; 
printf("%u",p); 

p現在指向內存中數組的地址,並打印該地址。

+0

哦,對不起,我在代碼中犯了一個錯誤......第一個printf是printf(「%u」,arr),並且由於arr和p指向相同的值,那麼爲什麼第二個printf顯示比較值... – ghostrider 2012-07-27 12:30:15

+0

你想從數組中打印*值*嗎? – Brian 2012-07-27 12:31:44

+3

此外,'%u'用於打印'unsigned int','%p'打印一個指針。 – 2012-07-27 12:31:47