| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:函数返回值的问题,求各位大神解惑??????
只看楼主 加入收藏
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:21 
函数返回值的问题,求各位大神解惑??????
#include<stdio.h>
#include<conio.h>
void CHANGE(int a,int b,int c)
{
      int temp;
      if(a > b)
     temp = a;
     a = b;
     b = temp;
      if(a > c)
    temp = a;
    a = c;
        c = temp;
      if(b > c)
    temp = b;
        b = c;
    c = temp;
}
int main(void)
{
    int a,b,c;
    printf("please input a b c :");
    scanf("%d %d %d",&a,&b,&c);
    CHANGE(a,b,c);
    printf("%d %d %d\n",a,b,c);//a b c的值为什么不能经过函数传回来?输入6 7 5,输出也是6 7 5.结果没变。函数没有返回排序后的值。
        getch();
    return 0;
}
/* 函数调用时,数组是传回首地址。

   如果求某个数或值,也是有一个值由return带回来。  
   
   是不是上面的函数的调用就是不能返回结果的。只有用指针才行。。求各位大神给一个上面函数不能被调用并返回排序结果的原因。。。??
   
   或者说没有原因就这样的。或者哪里错了找不到。请指教。。。新手勿笑!!!
*/
2015-10-28 11:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:6 
你所有的提问和代码都有这些问题,这么长时间了没见你改过
既然如此,即使别人给了你答案,对你而言又有什么意义

第一,scanf("%d %d %d",&a,&b,&c); 有需要输入的地方,你就应该告诉别人测试时输入什么,比如明确告诉大家输入3 2 1,或者更礼貌些,直接删除这一句代替以 a=3, b=2, c=1。

第二,代码不排版,你还要自虐到何时
      if(a > b)
     temp = a;
     a = b;
     b = temp;
如果你肯排版一下,根本不需要问别人
      if(a > b)
          temp = a;
      a = b;
      b = temp;
明显自己就看出错误来

第三,“a b c的值为什么不能经过函数传回来?”
假设它能传回,看如下代码
void change( int a ) { a = 2; }
int main( void )
{
    change( 1 );
    printf( "%d\n", 1 ); // 按照你的说法,这里就应该输出2,因为你的逻辑是1传给change后被改为了2,从此之后1就是2了
}


[此贴子已经被作者于2015-10-28 12:50编辑过]

2015-10-28 12:48
qq1625127317
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:185
专家分:450
注 册:2015-9-3
收藏
得分:1 
实参传递给函数的形参之后经过运算,得出结果,但是由于是单向传递就不能把得到的结果返给实参,所以呢要用到指针,当然在C++中有“引用”的说法,那个也是可以实现的,你可以自己敲一下简单的代码,试验一下函数的返回值的问题,很容易也很简单的也更清楚地

静坐常思己过,闲谈莫论人非
2015-10-28 13:07
孤狼A组
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:73
专家分:121
注 册:2015-9-8
收藏
得分:3 
#include<stdio.h>
 #include<conio.h>
 void CHANGE(int a,int b,int c)
 {
       int temp;
       if(a < b)
       {temp=a;a=b;b=temp;}
       if(c>a) printf("%d>%d>%d\n",c,a,b);
       else if(c>b) printf("%d>%d>%d\n",a,c,b);
            else printf("%d>%d>%d\n",a,b,c);  //调用函数给形参赋值的时候,形参只是简单的把实参复制了一次(存在另外的空间,调用完了,空间就会回收),所以形参的改变,不会影响实参。
        
     
 }
 int main(void)
 {
     int a,b,c;
     printf("please input a b c :");
     scanf("%d %d %d",&a,&b,&c);
     CHANGE(a,b,c);
    // printf("%d %d %d\n",a,b,c);
     //a b c的值为什么不能经过函数传回来?输入6 7 5,输出也是6 7 5.结果没变。函数没有返回排序后的值。
        getch();
     return 0;
 }
2015-10-28 13:17
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 2楼 rjsp
首先,非常感谢你经常帮我解答疑问,给我了很大的帮助。  
其次,你说的第一点和第二点。我知道错哪里了。我查了一下应该是代码规范问题,在这以前不知道规范问题的严重性。
      现在知道了。今后我会慢一点把这不好的习惯改回来。确实写得歪七歪八的。

第三,至于你说的第三点我看的不是很明白。应该说脑子有点乱。你的意思是能传回来,是我程序错了。还是本来就不能传回来。

     “a b c的值为什么不能经过函数传回来?”
      假设它能传回,看如下代码
void change( int a ) { a = 2; }
int main( void )
{   
    change( 1 );
    printf( "%d\n", 1); // 按照你的说法,这里就应该输出2,因为你的逻辑是1传给change后被改为了2,从此之后1就是2了
}
//你这程序里的函数时返回一个值,而我那返回的应该是三个值。这有哪些区别呢?

void change( int a ) { a = 2; }
int main( void )
{   
    int b=1;
    change( b );
    printf( "%d\n", b); // 那么函数返回的值是 1 呢?还是 2 呢?( 如何问题可笑,请原谅,本人脑子真的有点堵,总感觉哪里卡住了难受。)
}
2015-10-28 13:58
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
我问了一个愚蠢的问题
void change( int a ) { a = 2; }
int main( void )
{   
    int b=1;
    change( b );
    printf( "%d\n", b); // 那么函数返回的值是 1 呢?还是 2 呢?( 如何问题可笑,请原谅,本人脑子真的有点堵,总感觉哪里卡住了难受。)
}
这个可以自己调试一下就知道结果了。。。。。。
2015-10-28 14:06
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:1 
.......有进步。
再追问楼主一个问题,如何在函数内将输入值进行排序呢?

我们都在路上。。。。。
2015-10-28 14:12
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 2楼 rjsp

void change( int a ) { a = 2; }
int main( void )
{   
    change( 1 );
    printf( "%d\n", 1); // 按照你的说法,这里就应该输出2,因为你的逻辑是1传给change后被改为了2,从此之后1就是2了
}                     
 //你的意思是形参的数字时不能改变实参的数字的对吗?,实参的 1 是不会被取代的。所以是我那程序有问题。
                           
2015-10-28 14:15
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
楼主用过scanf吗?

总有那身价贱的人给作业贴回复完整的代码
2015-10-28 14:19
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 7楼 hellovfp
#include<stdio.h>
#include<conio.h>
int main(void)   //三个数的排序
{
    int a,b,c,temp;
    printf("please input a b c :");
    scanf("%d %d %d",&a,&b,&c);
    if(a > b)
    { temp = a; a = b; b = temp; }
        if(a > c)
    { temp = a; a = c; c = temp; }
        if(b > c)
    { temp = b; b = c; c = temp; }
        printf("%d %d %d\n",a,b,c);
        getch();
        return 0;
}

如果是很多数的排序,就用数组,起泡法。。。。。程序我写过了。。。
只是突然想起三个数的排序,用函数怎么返回。才写了那代码结果是原样输出,才想问怎么样才能把三个数的排序用函数输出。。。
或者函数就是不能返回三个数的。只能是数组首地址,或者一个返回值。

2015-10-28 14:25
快速回复:函数返回值的问题,求各位大神解惑??????
数据加载中...
 
   



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

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