【发布时间】:2018-05-02 05:04:09
【问题描述】:
我对程序的输出有些怀疑。
This is the picture where I am using %f to print j, *j and a[4]
In this pisture I've used %d to print j, *j and a[4]
这是我用过的代码-
#include<stdio.h>
int main()
{
float a[]={13.24,1.5,1.5,5.4,3.5};
float *j;
j=a;
j=j+4;
printf("%f %f %f\n",j,*j,a[4]);
return 0;
}
我的疑问是,如果我考虑 j 那么 j 代表 3.5 的地址,因为起初它指向 a[] 的基地址,然后我们将 4 添加到 j。所以在 %d 的情况下,j 应该打印 3.5 的地址。在 %f 的情况下,它也应该打印 j 的地址。在这里我考虑过 %d 所以我得到一个负值但是如果我使用了 %u 那么我会得到 3.5 的地址。但是在 %f 的情况下,为什么要打印值 3.500000 而不是地址?
接下来转到 *j,在使用 %d 时,为什么会打印一些垃圾值?我的意思是它应该根据我打印 3,因为我已将 %d 用于浮点值(3.5)。
最后,我不明白为什么在 a[4] 的情况下会打印 0。 a[4] 表示 3.5,那为什么不打印呢?
请帮忙。谢谢!
【问题讨论】:
-
用
%f打印j是未定义的行为,输出可能是垃圾。
标签: c arrays floating-point