2012-12-17 41 views
-4

對於下面的代碼片斷:爲什麼這些指針顯示不同的地址?

unsigned int *ptr[10]; 
int a[10]={0,1,2,3,4,5,6,7,8,9}; 
*ptr=a; 
printf("%u %u",ptr,a); 

我檢查上codepad.org和ideone.com.On兩種編譯其表示隨着對警告和PTR的不同值的

+0

這兩個是不同的,這就是爲什麼顯示 – Omkant

+2

貌似這個功課是流行今晚SO不同的地址。 –

+1

一個類似的問題剛剛回答[這裏](http://stackoverflow.com/questions/13910749/difference-between-ptr10-and-ptr10) –

回答

1

pointer targets in assignment differ in signedness 
format ‘%u’ expects type ‘unsigned int’, but argument 2 has type ‘unsigned int **’ 
format ‘%u’ expects type ‘unsigned int’, but argument 3 has type ‘int *’ 
0

當在指針上下文中使用時,ptr指向ptr數組的開始,而a指向a數組的開頭。這些是兩個不同的陣列,它們在內存中佔據完全不同的位置。他們爲什麼會一樣?

當然,用%u打印指針值是犯罪行爲。使用%p。這就是%p的用途。

0

這是一個指針數組

*ptr[10] 

如果你想分配給該走:

(*ptr)[10] 
0

uint *ptr[10]相當於uint **ptr和分配*ptr = a相同ptr[0] = a其分配a要在ptr陣列內首先抵消,它不會觸及ptr本身的值...

你也許想用其中的一個:

ptr = &a; 

// Or 
printf("%u %u",ptr[0],a); 

// Or 
unsigned int *ptr; 
ptr = a; 
相關問題