| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:函数返回值的问题,求各位大神解惑??????
取消只看楼主 加入收藏
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:10 
函数返回值的问题,求各位大神解惑??????
#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
朔源
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
朔源
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
朔源
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
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 9楼 embed_xuel
scanf 用过 。每次打代码都有用到。如果哪里有什么不对的。请多指教。。。
2015-10-28 14:27
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 15楼 TonyDeng
谢谢。你的提点。
2015-10-28 15:58
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 12楼 embed_xuel
我也是初学者。很多问题自己也没搞明白。这个问题我不知道怎么回答。
‘ & ’是取地址符。scanf 语句里后面的参数前都要加这个‘ & ’符号。而printf 语句里的并没有这么要求。是书上要求的。。
很多次我打代码时都忘了输入‘ & ’这个符号。这在编译时不会提示错误。但在运行输入数字调试时会出错。这是我对 ‘ & ’符号的所有认识了。
2015-10-28 16:04
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
谢谢各位的指教。在看指针了。对前面自己的问题好像有点想通了。不过还堵住。但不是堵死,有点通了。
2015-10-28 16:06
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
收藏
得分:0 
回复 19楼 embed_xuel
scanf 和 printf 是输入和输出函数。是厉害的人编好放在函数库里的。
2015-10-28 16:39
快速回复:函数返回值的问题,求各位大神解惑??????
数据加载中...
 
   



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

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