對於下面的代碼片斷:爲什麼這些指針顯示不同的地址?
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的不同值的
對於下面的代碼片斷:爲什麼這些指針顯示不同的地址?
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的不同值的
:
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 *’
當在指針上下文中使用時,ptr
指向ptr
數組的開始,而a
指向a
數組的開頭。這些是兩個不同的陣列,它們在內存中佔據完全不同的位置。他們爲什麼會一樣?
當然,用%u
打印指針值是犯罪行爲。使用%p
。這就是%p
的用途。
這是一個指針數組
*ptr[10]
如果你想分配給該走:
(*ptr)[10]
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;
這兩個是不同的,這就是爲什麼顯示 – Omkant
貌似這個功課是流行今晚SO不同的地址。 –
一個類似的問題剛剛回答[這裏](http://stackoverflow.com/questions/13910749/difference-between-ptr10-and-ptr10) –