对于以下代码片段:
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。在这两个编译器上,它显示 ptr 和 a 的不同值
警告:
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[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;
在指针上下文中使用时,指向数组ptr
的开头ptr
,而a
指向a
数组的开头。这是两个不同的数组,它们在内存中占据完全不同的位置。为什么它们会一样?
当然,打印指针值%u
是一种犯罪行为。使用%p
. 这%p
就是为了。