| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:谁能解释一下这个程序里指针函数的用法?
只看楼主 加入收藏
Areik
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2009-9-28
结帖率:87.5%
收藏
 问题点数:0 回复次数:3 
谁能解释一下这个程序里指针函数的用法?
该程序是计算方程ax^2+bx+c=0的根。在输入函数中,直接定义a,b,c为指针,那a,b,c所指的对应值在哪里?在判别式void root函数中,只需要定义a,b,c的类型就可以了吗?为啥不用定义指针a,b,c?在主函数中的输入,为啥a,b,c又被定义为输入地址?希望前辈能解释一下,谢谢



#include <stdio.h>
#include <math.h>

void output(float r1,float r2);

void input(float *a, float *b, float *c)
{
     printf("Enter three values of a b and c:");
     scanf("%f%f%f",a,b,c);
}

void root(float *r1,float *r2,float a,float b,float c)
{
     *r1=(-b+sqrt(b*b-4*a*c))/2;
     *r2=(-b-sqrt(b*b-4*a*c))/2;
}

int main()
{
     float a,b,c,r1,r2;

     input(&a,&b,&c);
     if(b*b-4*a*c<0)
     printf("No real solution!\n");

     else
     {   
         root(&r1,&r2,a,b,c);
         output(r1,r2);
     }
     return 0;
}

void output(float r1,float r2)
{
    printf("x1=%f  x2=%f",r1,r2);
}
搜索更多相关主题的帖子: 解释 用法 指针 函数 
2009-11-25 17:31
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
如果楼主觉得这样不好理解完全不用这么写的,我先解释一下你提出的几个问题吧。
1、首先input函数里,形参为指针类型。在函数里你应该注意到scanf函数,后面的三个变量没有取地址(因为它们已经是指针了),这就是说,输入的这三个值直接放到他们所指的单元空间里面去了。这样主函数调用这个函数的 时候输入的时候,直接对三个变量取地址。。最终的结果就是调用完input执行完之后,主函数的三个单元指的空间已经等于你的输入了,即赋值了。

总体而言,你应该是对函数调用过程中,形参的类型有些迷惑。形参为指针的话,那么传递的就是地址值,函数调用结束,地址变量就会注销。但是指针所指的空间里面的变量值改变却没有办法改变了。
2009-11-25 18:04
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:0 
可能说的比较乱,建议再看看这方面的内容吧。
可以这样理解 在主函数调用 input(a);(a为实参)之后,会执行函数input(int b);其中的b为形参。这个时候其实是在子函数另外生成一个临时变量b,这个时候只是b=a;函数执行完之后,b被注销。
但是如果是input(*a),(当然不能这么写,这样写表示a是指针而已),执行函数input(int *b),其中b还是形参,不过这个时候表现的意思是b=a不在一个意思了,而是b和a指向一个地方,如果在函数里面对b指向的内容改变了(*b改变了),函数执行完之后,b注销,但是b指向的单元也就是a指向的单元里面的值,已经改变了。。
2009-11-25 18:11
Areik
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2009-9-28
收藏
得分:0 
谢谢LS的解释~~
2009-11-30 06:30
快速回复:谁能解释一下这个程序里指针函数的用法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014255 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved