为什么这个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++;