c语言指针问题,求大神解答
#includevoidsub(doublex,double*y,double*z){*y=*y-1.0;*z=*z+x;}main(){doublea=2.5,b=9....
#includevoid sub (double x,double *y,double *z)
{*y=*y-1.0;*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.00000
我想问这到底怎么来的,pa=&a,sub函数里的*y,*z都为2.5 x为6.5. 那么这样的话接着往下代,*y=1.5,*z=9 但是他们2又都指向a,这就混乱了啊,咋回事啊。求大神说详细点啊~~ 展开
{*y=*y-1.0;*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.00000
我想问这到底怎么来的,pa=&a,sub函数里的*y,*z都为2.5 x为6.5. 那么这样的话接着往下代,*y=1.5,*z=9 但是他们2又都指向a,这就混乱了啊,咋回事啊。求大神说详细点啊~~ 展开
5个回答
展开全部
#include<stdio.h>
void sub (double x,double *y,double *z)
{
//此时x = b - a 即 x = 6.5
*y=*y-1.0; // a = a - 1.0 即 a = 1.5 注意:a的值已经发生变化
*z=*z+x; // a = a + x 即 a = 1.5 + 6.5
//此时a的值又发生变化,变成8了。
}
main()
{
double a=2.5, b=9.0, *pa, *pb;
pa=&a;
pb=&b;
sub(b-a, pa, pa);
printf("%f\n",a);
}
追问
哦,是的,我明白过来了。谢谢
哦,是的,我明白过来了。谢谢
展开全部
b-a 取值 6.5; *pa 即 a 取值 2.5; 由于sub的后面两个参数是传址的,也就是说,sub内部对后两个参数所作的修改,会直接反映到传参者所在的栈空间,即修改调用者栈空间变量。
sub(b-a, pa, pa) => *pa = *pa - 1.0 = 1.5;
=> *pa = *pa + (b - a) = 1.5 + (9.0 - 2.5) = 1.5 + 6.5 = 8;
因为是浮点型打印,所以是 8.00000
sub(b-a, pa, pa) => *pa = *pa - 1.0 = 1.5;
=> *pa = *pa + (b - a) = 1.5 + (9.0 - 2.5) = 1.5 + 6.5 = 8;
因为是浮点型打印,所以是 8.00000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
void sub (double x,double *y,double *z)
{//x = 9.0 - 2.5 = 6.5
//当下y与z指向的都是a的地址&a
*y=*y-1.0;// *y = 2.5 - 1.0 = 1.5
*z=*z+x; // *z = 1.5 + 6.5 = 8.0
}
main()
{
double a=2.5,b=9.0,*pa,*pb;
pa=&a;
pb=&b;
sub(b-a,pa,pa);//参数都是pa
printf("%f\n",a);
}
void sub (double x,double *y,double *z)
{//x = 9.0 - 2.5 = 6.5
//当下y与z指向的都是a的地址&a
*y=*y-1.0;// *y = 2.5 - 1.0 = 1.5
*z=*z+x; // *z = 1.5 + 6.5 = 8.0
}
main()
{
double a=2.5,b=9.0,*pa,*pb;
pa=&a;
pb=&b;
sub(b-a,pa,pa);//参数都是pa
printf("%f\n",a);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%f\n",a); 不是 %f 是 %lf
因为是double
因为是double
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-23
展开全部
你的分析没有逻辑问题,只是最后一步1.5+6.5等于8你算成了9。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询