求教一个C语言问题
各位高手看看这个程序的输出结果是多少啊,顺便把过程写下,谢谢了,从书上看的,感觉好象印错了voidsub(floatx,float*y,float*z){*y=*y-1....
各位高手看看这个程序的输出结果是多少啊,顺便把过程写下,谢谢了, 从书上看的,感觉好象印错了
void sub(float x,float *y,float *z)
{ *y=*y-1.0;
*z=*z+x;
}
main()
{float a=2.5,b=9.0,*pa,*pb;
pa=&a; pb=&b;
sub(b-a,pa,pa);
printf("%f\n",a);
}
我知道结果是8.0000000 可是算不出,谁能解释一下,说明白了我可以加分 展开
void sub(float x,float *y,float *z)
{ *y=*y-1.0;
*z=*z+x;
}
main()
{float a=2.5,b=9.0,*pa,*pb;
pa=&a; pb=&b;
sub(b-a,pa,pa);
printf("%f\n",a);
}
我知道结果是8.0000000 可是算不出,谁能解释一下,说明白了我可以加分 展开
2009-03-10
展开全部
咱们先看main函数的处理:
pa=&a; //pa指向a的地址,所以*pa的值为2.5
pb=&b; //pb指向b的地址,所以*pb的值为9.0
调用sub(b-a,pa,pa),由于b-a=9.0-2.5=6.5,pa指向a的地址,pb指向b的地址,
所以void sub(float x,float *y,float *z) 中:
x=6.5
float *y: y指向pa指向的地址,也就是y指向a的地址,*y=2.5
float *z: z指向pa指向的地址,也就是z指向a的地址,*z=2.5
再看sub函数中的处理:
*y=*y-1.0=2.5-1.0=1.5 //由于y指向a的地址,所以对于*y的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为1.5
注意一下:由于y和z都指向a的地址,所以*y被赋值为1.5以后,a的值变为1.5,也就意味着*z也就是1.5了,所以下面的*z应该是带入1.5进行计算
*z=*z+x=1.5+6.5=8.0 //由于z指向a的地址,所以对于*z的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为8.0
所以,最后a的值为8
pa=&a; //pa指向a的地址,所以*pa的值为2.5
pb=&b; //pb指向b的地址,所以*pb的值为9.0
调用sub(b-a,pa,pa),由于b-a=9.0-2.5=6.5,pa指向a的地址,pb指向b的地址,
所以void sub(float x,float *y,float *z) 中:
x=6.5
float *y: y指向pa指向的地址,也就是y指向a的地址,*y=2.5
float *z: z指向pa指向的地址,也就是z指向a的地址,*z=2.5
再看sub函数中的处理:
*y=*y-1.0=2.5-1.0=1.5 //由于y指向a的地址,所以对于*y的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为1.5
注意一下:由于y和z都指向a的地址,所以*y被赋值为1.5以后,a的值变为1.5,也就意味着*z也就是1.5了,所以下面的*z应该是带入1.5进行计算
*z=*z+x=1.5+6.5=8.0 //由于z指向a的地址,所以对于*z的赋值,实际上就是对于a的地址的赋值,也就是对于a进行赋值,所以实际上就是将a赋值为8.0
所以,最后a的值为8
展开全部
遇到sub(b-a,pa,pa);
b-a=7.5 =x;
*pa=2.5 =*y;
*pa=2.5 =*z;
到sub()里
a=a-1.0
a=1.5;
a=a+x;
a=8
b-a=7.5 =x;
*pa=2.5 =*y;
*pa=2.5 =*z;
到sub()里
a=a-1.0
a=1.5;
a=a+x;
a=8
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个函数好像只认相对路径,你到你放该程序的目录下,建文件aa.txt
if((p=fopen("aa.txt","r+"))==NULL)
if((p=fopen("aa.txt","r+"))==NULL)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果很简单 8.0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
8.0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询