鱼C论坛

 找回密码
 立即注册
查看: 1357|回复: 8

[已解决]一个三个数比大小的小问题,求助各位大大!

[复制链接]
发表于 2018-8-10 21:25:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我已经调用了自定义函数,为啥输出的结果却不对呢?请教各位大大!


#include "stdio.h"
#include "conio.h"

void exchange(int x,int y,int z);

int main()
{
        int a,b,c;
       
        printf("Please input three numbers: ");
        scanf("%d%d%d",&a,&b,&c);
       
        exchange(a,b,c);
       
        printf(" %d > %d > %d\n",a,b,c);  // 就是这个地方,为啥输出的结果不对呢?我明明已经调用了自定义函数了啊!黑人问号??
       
        getch();
       
        return 0;
}

void exchange(int x,int y,int z)
{
        int temp;
       
        if(x < y)
        {
                temp = x;
                x = y;
                y =temp;
        }
       
        if(x < z)
        {
                temp = x;
                x = z;
                z = temp;
        }
       
        if(y < z)
        {
                temp = y;
                y = z;
                z = temp;
        }
       
        //printf(" %d > %d > %d\n",x,y,z);
       
}

         

        在此先谢谢各位!!来自一个萌新的疑问。。。


最佳答案
2018-8-10 21:44:28
wangdarling 发表于 2018-8-10 21:42
啊啊啊啊!又是指针!!唉,看来我得再重新好好学一遍指针了!!

不过,又是大佬你!!嘻嘻,两次贴都 ...


指针其实很简单,其实就是指向一个内存地址,可以通过指针顺藤摸瓜地修改里面的内容,以及和它相邻(不只是前面一个和后面一个)的内容。
另外,假如我的回答解决了您的问题,请将我的答案设为最佳答案~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-10 21:35:30 | 显示全部楼层
这个x,y,z只是a,b,c的拷贝,要想修改a,b,c的值,请使用指针:
  1. #include "stdio.h"
  2. #include "conio.h"

  3. void exchange(int x,int y,int z);

  4. int main()
  5. {
  6.         int a,b,c;
  7.         
  8.         printf("Please input three numbers: ");
  9.         scanf("%d%d%d",&a,&b,&c);
  10.         
  11.         exchange(&a,&b,&c);
  12.         
  13.         printf(" %d > %d > %d\n",a,b,c);  // 就是这个地方,为啥输出的结果不对呢?我明明已经调用了自定义函数了啊!黑人问号??
  14.         
  15.         getch();
  16.         
  17.         return 0;
  18. }

  19. void exchange(int* x,int* y,int* z)
  20. {
  21.         int temp;
  22.         
  23.         if(*x < *y)
  24.         {
  25.                 temp = *x;
  26.                 *x = *y;
  27.                 *y =temp;
  28.         }
  29.         
  30.         if(*x < *z)
  31.         {
  32.                 temp = *x;
  33.                 *x = *z;
  34.                 *z = temp;
  35.         }
  36.         
  37.         if(*y < *z)
  38.         {
  39.                 temp = *y;
  40.                 *y = *z;
  41.                 *z = temp;
  42.         }
  43.         
  44.         //printf(" %d > %d > %d\n",x,y,z);
  45.         
  46. }
复制代码

这样才能通过指针修改到a,b,c的值。(因为这时候x,y,z等于a,b,c的内存地址,所以可以去修改)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-10 21:42:10 | 显示全部楼层
无符号整形 发表于 2018-8-10 21:35
这个x,y,z只是a,b,c的拷贝,要想修改a,b,c的值,请使用指针:

这样才能通过指针修改到a,b,c的值。(因为 ...

啊啊啊啊!又是指针!!唉,看来我得再重新好好学一遍指针了!!

不过,又是大佬你!!嘻嘻,两次贴都是你帮我解决的,哈哈,谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 21:44:28 | 显示全部楼层    本楼为最佳答案   
wangdarling 发表于 2018-8-10 21:42
啊啊啊啊!又是指针!!唉,看来我得再重新好好学一遍指针了!!

不过,又是大佬你!!嘻嘻,两次贴都 ...


指针其实很简单,其实就是指向一个内存地址,可以通过指针顺藤摸瓜地修改里面的内容,以及和它相邻(不只是前面一个和后面一个)的内容。
另外,假如我的回答解决了您的问题,请将我的答案设为最佳答案~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-10 21:45:12 | 显示全部楼层
无符号整形 发表于 2018-8-10 21:35
这个x,y,z只是a,b,c的拷贝,要想修改a,b,c的值,请使用指针:

这样才能通过指针修改到a,b,c的值。(因为 ...

#include "stdio.h"
#include "conio.h"

void exchange(int x,int y,int z);

int main()
{
        int a,b,c;
       
        printf("Please input three numbers: ");
        scanf("%d%d%d",&a,&b,&c);
       
        exchange(a,b,c);
       
        //printf(" %d > %d > %d\n",a,b,c);
       
        getch();
       
        return 0;
}

void exchange(int x,int y,int z)
{
        int temp;
       
        if(x < y)
        {
                temp = x;
                x = y;
                y =temp;
        }
       
        if(x < z)
        {
                temp = x;
                x = z;
                z = temp;
        }
       
        if(y < z)
        {
                temp = y;
                y = z;
                z = temp;
        }
       
        printf(" %d > %d > %d\n",x,y,z);
       
}

这个没用指针,不也修改了a,b,c的值了吗?这个又是什么说法?( 哈哈,见笑啦!!!)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 21:46:34 | 显示全部楼层
wangdarling 发表于 2018-8-10 21:45
#include "stdio.h"
#include "conio.h"

实际上没有修改abc的值,你可以试试不要注释主函数里面的printf。
这个x,y,z是一个拷贝(相当于局部变量),函数返回之后就释放了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-10 21:50:25 | 显示全部楼层
无符号整形 发表于 2018-8-10 21:46
实际上没有修改abc的值,你可以试试不要注释主函数里面的printf。
这个x,y,z是一个拷贝(相当于局部变量 ...

嗯嗯,我试了,确实是!唉,我得好好补一下了,大佬,谢谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 21:51:14 | 显示全部楼层
wangdarling 发表于 2018-8-10 21:50
嗯嗯,我试了,确实是!唉,我得好好补一下了,大佬,谢谢了!

不用谢^~^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-21 02:05:48 | 显示全部楼层
无符号整形 发表于 2018-8-10 21:35
这个x,y,z只是a,b,c的拷贝,要想修改a,b,c的值,请使用指针:

这样才能通过指针修改到a,b,c的值。(因为 ...

为啥上面的这段代码我打进去会显示有错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 04:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表