为什么这个c程序输出像这样?

时间:2011-07-04 17:21:44

标签: c

#include<stdio.h>
main
{
    int x[]={1,2,3,4,5};
    int i,*j;
    j=x;
    for(i=0;i<=4;i++)
    {
        printf("%u",j);
        j++;
    }
}

输出:

65512
65514
65516
65518
65520

但是当我将printf更改为“

printf("%u",&j[i]);

输出是:

65512
65516
65520
65524
65528

为什么地址在第一种情况下相差2,在第二种情况下相差4?

仅打印j和打印&j[i]有什么问题?

2 个答案:

答案 0 :(得分:3)

在第二个示例中,您获得了4的跳跃,因为您正在递增j 抵消i!这两者都有2的差异。

另请注意printf不是类型安全的;您可以确保参数与格式说明符匹配。您已指定%u,但您已将其指定为int *,则应使用%p作为指针。

答案 1 :(得分:0)

首先,为了清楚说明,您正在打印指针j,而不是指向的值*j

现在,关于打印地址。在你的第二个例子中:

for(i=0;i<=4;i++)
{
  printf("%u",&j[i]); 
  j++;

&j[i]等于(j+i)i在每次迭代中递增,这对指针的值贡献2,j也递增,这又增加了2。