C一段指针 请高手

来源:百度知道 编辑:UC知道 时间:2024/06/01 15:11:18
#include <stdio.h>
void sub(double x,double *y,double *z)
{*y=*y-1; *z=*z+x;}
main()
{double a=2.5,b=9.0,*pa,*pb;
pa=&a;
pb=&b;
sub(b-a,pa,pa);
printf("%f\n",a);}
最后结果是多少
答案是8.000000
请高手 讲详细点过程 谢谢 谢谢 谢谢

sub(6.5,pa,pa)

*y=*y-1
==>
*pa=*pa-1
==>
*pa=1.5

*z=*z+x
==>
*pa=*pa+6.5
==>
*pa=1.5+6.5=8.0

a=&pa
==>
a=8.0

*pa=*pa-1 /* *pa=1.5 */
*pa=*pa+(b-a) /* *pa=1.5 +( 9-2.5) 也就是8.0 */

又因为printf("%f",a);

是f 格式化输出 要保留小数点后面的6个数字 所以是 8.000000

用指针作为函数的参数的时候属于传址调用,是可以改变调用函数中变量的值的,所以,经过sub中的运算,将a的值改变为8.0然后格式输出,得到8.000000

如果你把sub中的*都给去掉,然后直接用sub(a-b,a,b)调用的话,那么a的值就不会改变,

指针作为参数,可以改变变量的值。
b-a=6.5
*pa=2.5
*pb=9.0
调用sub(b-a,pa,pa)后,
首先执行
*pa=*pa-1;
a值变为1.5
然后执行
*pa=*pa+x;
得结果a=1.5+6.5=8