wangdarling 发表于 2018-8-10 21:25:18

一个三个数比大小的小问题,求助各位大大!

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


#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:35:30

这个x,y,z只是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的值。(因为这时候x,y,z等于a,b,c的内存地址,所以可以去修改)

wangdarling 发表于 2018-8-10 21:42:10

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

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

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

不过,又是大佬你!!嘻嘻,两次贴都是你帮我解决的,哈哈,谢谢啦!

无符号整形 发表于 2018-8-10 21:44:28

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

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

指针其实很简单,其实就是指向一个内存地址,可以通过指针顺藤摸瓜地修改里面的内容,以及和它相邻(不只是前面一个和后面一个)的内容。
另外,假如我的回答解决了您的问题,请将我的答案设为最佳答案~{:10_254:}

wangdarling 发表于 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的值了吗?这个又是什么说法?( 哈哈,见笑啦!!!)

无符号整形 发表于 2018-8-10 21:46:34

wangdarling 发表于 2018-8-10 21:45
#include "stdio.h"
#include "conio.h"



实际上没有修改abc的值,你可以试试不要注释主函数里面的printf。
这个x,y,z是一个拷贝(相当于局部变量),函数返回之后就释放了。

wangdarling 发表于 2018-8-10 21:50:25

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

嗯嗯,我试了,确实是!唉,我得好好补一下了,大佬,谢谢了!{:10_277:}

无符号整形 发表于 2018-8-10 21:51:14

wangdarling 发表于 2018-8-10 21:50
嗯嗯,我试了,确实是!唉,我得好好补一下了,大佬,谢谢了!

不用谢^~^

居士亭 发表于 2019-9-21 02:05:48

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

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

为啥上面的这段代码我打进去会显示有错误
页: [1]
查看完整版本: 一个三个数比大小的小问题,求助各位大大!