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

为什么这个c程序的输出是这样的?,c,C,但是当我将printf更改为“ 输出为: printf("%u",&j[i]); 为什么第一种情况下地址相差2,第二种情况下地址相差4 仅打印j和打印&j[i]有什么问题?在第二个示例中,您会得到4的跳跃,因为您正在增加j,并用i进行抵消!这两个值都会产生2的差异 还请注意,printf不是类型安全的;由您来确保参数与格式说明符匹配。您已经指定了%u,但是您给了它一个int*,您应该使用%p作为指针。首先,为了清楚起见,您正在打印指针j,而不是指针点值,*j 现在,关于打印地址。在第二

但是当我将
printf
更改为“

输出为:

printf("%u",&j[i]);
为什么第一种情况下地址相差2,第二种情况下地址相差4


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

在第二个示例中,您会得到4的跳跃,因为您正在增加
j
,并用
i
进行抵消!这两个值都会产生2的差异


还请注意,
printf
不是类型安全的;由您来确保参数与格式说明符匹配。您已经指定了
%u
,但是您给了它一个
int*
,您应该使用
%p
作为指针。

首先,为了清楚起见,您正在打印指针
j
,而不是指针点值,
*j

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

65512
65516
65520
65524
65528

for(i=0;i@OliCharlesworth抱歉“j=x”我忘记了代码中的这一行。现在我更新了代码检查它………注意:一些编译器可以警告您将错误的参数传递给printf,但您必须启用warnings@lgorOks“j”也是一个地址和“&j[i]“也是一个只知道的地址..我正在打印这两个..为什么地址不一样???我想他很清楚地址不一样的原因。你在增加
j
i
,所以显然
j
(你的第一个例子)的增加速度会比
j+i
慢(你的第二个例子)。要获得与第一个示例相同的输出,您需要
&j[0]
printf("%u",&j[i]);
65512
65516
65520
65524
65528
for(i=0;i<=4;i++)
{
  printf("%u",&j[i]); 
  j++;