#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]
有什么问题?
答案 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。