对于以下代码片段:
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值和一个
答案 0 :(得分: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 *’
答案 1 :(得分:0)
在指针上下文中使用时,ptr
指向ptr
数组的开头,而a
指向a
数组的开头。这是两个不同的数组,占据内存中完全不同的位置。为什么他们会一样?
当然,使用%u
打印指针值是一种犯罪行为。使用%p
。这就是%p
的用途。
答案 2 :(得分:0)
这是一个指针数组
*ptr[10]
如果你想指定一个去:
(*ptr)[10]
答案 3 :(得分: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;
本身的价值......
您可能想要使用以下其中一种:
{{1}}