为什么这些指针显示不同的地址?

时间:2012-12-17 08:59:16

标签: c pointers

对于以下代码片段:

 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值和一个

4 个答案:

答案 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 = aptr[0] = a相同,aptr分配给ptr数组内的第一个偏移,它没有触及ptr = &a; // Or printf("%u %u",ptr[0],a); // Or unsigned int *ptr; ptr = a; 本身的价值......

您可能想要使用以下其中一种:

{{1}}