| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:函数的传送问题
只看楼主 加入收藏
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
结帖率:85.29%
收藏
已结贴  问题点数:10 回复次数:8 
函数的传送问题
下面是企图解决同一个问题的两个方法,为什么第一个可以运行出结果来,而第二个给我的结果全是0?
1.#include <stdio.h>
#include <stdlib.h>
void mymod(double,double,double *,double *);
  
int main()
{  double a,b;
   scanf("%lf%lf",&a,&b);   
    mymod(a,b,&a,&b);
  system("PAUSE");   
  return 0;}   

void mymod(double x,double y,double *px,double *py)
{  *px=x+y;*py=x-y;
   printf("sum=%lf\n",*px);
   printf("sub=%lf\n",*py);}

2.#include <stdio.h>
#include <stdlib.h>
void mymod(double,double,double *,double *);
  
int main()
{  double a,b;
   scanf("%lf%lf",&a,&b);   
    mymod(a,b,&a,&b);
    printf("sum=%lf,sub=%lf\n",&a,&b);
  system("PAUSE");   
  return 0;}   

void mymod(double x,double y,double *px,double *py)
{  *px=x+y;*py=x-y;}
搜索更多相关主题的帖子: double void include system return double void include system return 
2011-06-23 20:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
printf("sum=%lf,sub=%lf\n",&a,&b);    // 扔掉
2011-06-23 20:19
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 2楼 voidx
我不是想扔掉它,我是企图想把第二个的程序改成可以出正确结果的东东来。。。
除了扔掉,可不可以教我怎么改让机器走出正确结果来?:)
2011-06-23 20:27
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 2楼 voidx
多谢提醒,扔掉后就对了。谢谢,有点傻,不好意思。 :)
2011-06-23 20:28
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 2楼 voidx
机器是做出来了,还有一点小问题:
我总觉得运行了void以后,结果该是一个指针或是地址值比如说是带*号或是带&号的,为什么打印出来的时候只是要打印a和b就可以有正确结果出来了?void的那个函数里做的是两个指针呀。。。
2011-06-23 20:32
lklzyy
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2009-8-24
收藏
得分:1 
这个主要是你打印的时候将多了&&
2011-06-23 22:20
woshilaoyi
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2011-6-24
收藏
得分:4 
回复 4楼 wxz11191975
因为void函数的两个指针是指向a,b的,在函数里,你改变了指针所指向空间里的值,讲相当于改变了a,b的值。
2011-06-24 13:16
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
傻问题继续纠结中。。。
可是我还是不明白那个函数的传送的问题。那个void运行出来的结果是两个指针指向的地址,那么a,b对应于函数中的x和y. 为什么mymod(a,b,&a,&b); 后,打印的时候,要打印的是a和b的值呢?
按我的理解,打印的时候,要打印的该是那两个指针指向的地址值呀,可不是去打印a,b呀?为什么打印了ab,void函数的运行结果就出来了?
a和b的值为什么会变了?

不好意思,问题有点傻。。。
2011-06-26 05:49
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 8楼 wxz11191975
这里你调用函数的时候传递的是在 main 函数中定义变量 a 和 b 的地址。也就是说,在函数 mymod 中,x 和 y 中存放的分别是 a 和 b 的地址。

*x 表示 x 中所存储的地址在内存中所对应的存储单元里存储的值。
由于 x 中存储了 a 的地址,所以改变 *x 也就改变了 a 的值。

y 同理

[ 本帖最后由 voidx 于 2011-6-26 08:44 编辑 ]
2011-06-26 08:32
快速回复:函数的传送问题
数据加载中...
 
   



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

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