先看下面的代码:
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
main(){
float f,*p;
f=10.1;
p=&f;
printf("%p %d %f\n",p,p,*p);
/*以下三行在我的电脑上输出为 "10.1 0.0" */
printf("%f %f\n",p,*p);
printf("%f %f\n",*p,p);
printf("%f %f\n",p,p);
printf("#####################\n");
/*以下三行在我的电脑上输出为 "10.1 10.1" */
printf("%f %f\n",*p,*p);
printf("%f %f\n",*p,p);
printf("%f %f\n",p,p);
}
printf("%f",p) (首先说明,这种输出在逻辑上是不通的)为什么有时候能把输出正确的数值,有时候不可以?
以下是在LINUX下用gcc编译后输出的结果
其输出:
0x7fffc3b23e24 -1011728860 10.100000 //printf("%p %d %f\n",p,p,*p);
10.100000 0.000000 //printf("%f %f\n",p,*p);
10.100000 0.000000 //printf("%f %f\n",*p,p);
10.100000 0.000000 //printf("%f %f\n",p,p);
#####################
10.100000 10.100000 //printf("%f %f\n",*p,*p);
10.100000 10.100000 //printf("%f %f\n",*p,p);
10.100000 10.100000 //printf("%f %f\n",p,p);
先前说得正确结果和错误结果,容易使人误解成10.1和10.099996的差别,我的本意不是说这个。那我再说得具体点,就是
printf("%f\n",p) 和printf("%f\n",*p) 这个格式,为何在不同的语句输出后会有差别?
望高人指点