CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

两段很基础的代码————大家帮俺看看在线等待!!!!

楼主wangchuanbin(飘零)2005-03-31 21:38:50 在 C/C++ / C语言 提问

第一段:  
  #include   <stdio.h>  
  void   main()  
  {  
  int   *p1,*p2,a,b,*t;  
  scanf("%d,%d",&a,&b);  
  p1=&a;  
  p2=&b;  
  if   (*p1<*p2)  
  {  
  t=   p1;  
  p1=p2;  
  p2=t;  
  }  
  printf("%d,%d\n",*p1,*p2);  
  }  
  能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!  
   
   
  第二段:  
  #include   <stdio.h>  
  void   main()  
  {  
        void   chang();  
        int   *p1,*p2,a,b,*t;  
        scanf("%d,%d",&a,&b);  
        p1=&a;  
        p2=&b;  
        chang(p1,p2);  
        printf("%d,%d\n",*p1,*p2);  
  }  
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   *t;  
      if   (*pt1<*pt2)  
      {  
            t=pt1;  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }  
   
  不能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!  
   
  我的问题是:为什么第一段就能达到降序的效果第二段就不能达到呢????  
  为什么????????????????????????????????????我只要为什么啊     第二种达不到我只想知道这个原因。 问题点数:20、回复次数:18Top

1 楼UniverseWisdom(幻法师)回复于 2005-03-31 21:43:11 得分 0

change中楼主只交换了指针值,没有交换变量值。  
  应该:  
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   t;  
      if   (*pt1<*pt2)  
      {  
            t=*pt1;  
            *pt1=*pt2;  
            *pt2=t;  
      }  
      return;  
  }Top

2 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:45:23 得分 0

应该交换指针变量的值  
  不是指针的值  
   
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   t;  
      if   (*pt1<*pt2)  
      {  
            t=*pt1;  
            *pt1=*pt2;  
            *pt2=t;  
      }  
      return;  
  }Top

3 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:46:35 得分 0

或者这样,用指针的引用  
   
  void   chang(int   *&pt1,int   *&pt2)  
  {  
      int   *t;  
      if   (*pt1<*pt2)  
      {  
            t=pt1;  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }Top

4 楼txing(天星)回复于 2005-03-31 21:47:19 得分 0

函数调用值调用。  
  #include   <stdio.h>  
  void   main()  
  {  
        void   chang();  
        int   *p1,*p2,a,b,*t;  
        scanf("%d,%d",&a,&b);  
        p1=&a;  
        p2=&b;  
        chang(p1,p2);  
        printf("%d,%d\n",*p1,*p2);  
  }  
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   *t;  
      if   (*pt1<*pt2)     //函数调用的时候创建了P1和P2的副本_p1和_p2这里改变的是_p1和_p2的值并没有改变P1和P2的值。如果要用函数调用就应该用指针的指针。  
      {  
            t=pt1;  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }  
  Top

5 楼wangchuanbin(飘零)回复于 2005-03-31 21:49:09 得分 0

我第一段程序中不也只是交换了指针的值吗??Top

6 楼losky(理性的人背叛内心,感性的人背叛现实)回复于 2005-03-31 21:52:46 得分 0

改成这样就可以了  
  #include   <stdio.h>  
    void   chang(int   *pt1,int   *pt2)  
  {  
      int   t;  
      if   (*pt1<*pt2)  
      {  
            t=*pt1;  
            *pt1=*pt2;  
            *pt2=t;  
      }                                                                                    
                                                                             
  }  
  void   main()  
  {  
        int   *p1,*p2,a,b;  
        scanf("%d,%d",&a,&b);  
        p1=&a;  
        p2=&b;  
        chang(p1,p2);  
        printf("%d,%d\n",*p1,*p2);  
  }  
   
  Top

7 楼pcboyxhy(-273.15℃)回复于 2005-03-31 21:53:02 得分 0

弄清指针的值  
  和指针指向的地方存放的值Top

8 楼wangchuanbin(飘零)回复于 2005-03-31 21:55:19 得分 0

我要的不是该过来的结果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我手上也有该过来的结果!!!!!!!!!!!!!我想知道为什么不懂的不理解的不要回答好吗拜托了暗暗           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11我想弄明白指针做为参数时的原理Top

9 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:59:37 得分 0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11  
  这有什么不好明白的  
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   *t;  
      if   (*pt1<*pt2)  
      {  
            t=pt1;  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }  
  函数运行之后对pt1跟pt2的值根本没有改变  
   
  自然没有效果拉!Top

10 楼pcboyxhy(-273.15℃)回复于 2005-03-31 22:00:50 得分 0

#include   <stdio.h>  
  void   main()  
  {  
  int   *p1,*p2,a,b,*t;  
  scanf("%d,%d",&a,&b);  
  p1=&a;  
  p2=&b;  
  if   (*p1<*p2)                              
  {  
  t=   p1;  
  p1=p2;  
  p2=t;  
  }  
  printf("%d,%d\n",*p1,*p2);  
  }  
  能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!  
   
   
  第二段:  
  #include   <stdio.h>  
  void   main()  
  {  
        void   chang();  
        int   *p1,*p2,a,b,*t;  
        scanf("%d,%d",&a,&b);  
        p1=&a;  
        p2=&b;  
        chang(p1,p2);  
        printf("%d,%d\n",*p1,*p2);  
  }  
  void   chang(int   *pt1,int   *pt2)     //   pt1和pt2不过是传过来的指针值,只能改变指针指向的地方的值  
  {  
      int   *t;  
      if   (*pt1<*pt2)  
      {  
            t=pt1;                     //这里不影响main里面的东西  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }  
  Top

11 楼wangchuanbin(飘零)回复于 2005-03-31 22:02:58 得分 0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11  
  这有什么不好明白的  
  void   chang(int   *pt1,int   *pt2)  
  {  
      int   *t;  
      if   (*pt1<*pt2)  
      {  
            t=pt1;  
            pt1=pt2;  
            pt2=t;  
      }  
      return;  
  }  
  函数运行之后对pt1跟pt2里面所指向的地址可变了啊!!!a和b   是和pt1和pt2里面装的地址联系着呢怎么解释Top

12 楼wangchuanbin(飘零)回复于 2005-03-31 22:10:00 得分 0

比如:  
            pt1   里面装的地址是200021,200021地址内存放的是3。  
            pt2   里面装的地址是200023,200023地址内存放的是4。  
  chang()函数的作用就是把pt1   指向200023   ,把pt2   指向   200021。这样对吧!!!?????  
  因为200021地址内存放的是3   ,所以*pt2应该是3才对啊我是这样理解的请指导!???????????????????????????????????????Top

13 楼wangchuanbin(飘零)回复于 2005-03-31 22:12:42 得分 0

我知道只交换的地址,但那地址里都有东西啊??????????????????????????/Top

14 楼sedge(*-*哪里的天空?永远不阴霾?*-*)回复于 2005-03-31 23:01:38 得分 0

pt1   和   pt2   确实交换了  
  但   p1   和   p2   确实没交换  
   
  Top

15 楼dogdog2005()回复于 2005-03-31 23:17:00 得分 20

后者的值只在void   change交换了,交换后的值并没有传递回主函数,它做的只是单向的值传递。  
  如果你还不明白,建议你看看谭浩强的c语言程序设计,关于函数那章。Top

16 楼cssin(Steven Liu)回复于 2005-04-01 00:26:33 得分 0

我比较认同dogdog2005的看法。  
   
  int   main()   {  
                    ......  
   
  swap(&i,   &j);  
   
                    ......  
  }  
   
  1.  
  void   swap   (int   a,   int   b)   {  
  int   temp;  
   
  temp   =   a;  
  a   =   b;  
  b   =   temp;  
   
  return;  
  }  
   
  2.  
  void   swap(int   *a,   int   *b)   {  
  int   temp;  
   
  temp   =   *a;  
  *a   =   *b;  
  *b   =   temp;  
   
  return;  
  }  
   
  3.  
  void   swap(int   *a,   int   *b)   {  
  int   *temp;  
   
  temp   =   a;  
  a   =   b;  
  b   =   temp;  
   
  return;  
  }  
  这三个代码有两个相同的地方  
  1.都是把i,   j的地址Copy给了a,   b  
  2.在调用了swap之后,a,   b的值都被销毁了  
  而不同的一个地方在于:其中代码1,3交换了地址a,   b的值,而代码2交换了地址a,   b所指向的值。不知道这样解释是否有问题,大家来讨论讨论。Top

17 楼xialin168(林)回复于 2005-04-01 02:15:15 得分 0

楼主是才开始学指针的吧!  
  还是先把书里的东西学好了再来提一些需要技术的问题!  
  这个问题算是白痴问题了,  
  自已还没学好,别人给指点又看不明白,  
  还大叫不懂的不理解的别来....,是你自已还没弄懂!  
  楼上的都是正确的解答!  
  我劝你还是改行算了!Top

18 楼shzwfq(静苑)回复于 2005-04-01 08:28:01 得分 0

“我知道只交换的地址,但那地址里都有东西”  
          大哥,指针本身也是变量,它本身也是一个值  
    “pt1   里面装的地址是200021,200021地址内存放的是3。  
            pt2   里面装的地址是200023,200023地址内存放的是4。“  
  这句话正确!  
  chang()函数的作用就是把pt1   指向200023   ,把pt2   指向   200021”  
  这句话也正确!  
  但你说pt1,pt2的改变会影响到主函数里实参p1,p2的值吗?  
  不会!!!!  
  这样理解由于p1   ,p2本身也是值,又传递参数时是传的他们的值,所以chang()函数里面pt1,pt2只是他们的副本,副本本身值(而不是像你理解的他们所指向的内容的交换)的变化根本与p1   ,p2无关!  
  Top

相关问题

  • 求 一个用 data控件 和access做的基础图书馆管理 的代码 在线等待先到显得
  • 源代码下载(在现等待)
  • 『『『看看代码』』』在线等待
  • [[[看代码了]]]在线等待
  • 看看代码,在先等待给分
  • 代码问题,在线等待!!!
  • C++转DELPHI代码,在线等待..
  • JAVA基础代码报错,求教
  • 高手请看这段代码如何错了?(等待中)
  • ASP上传图象代码错误。在线等待!

关键词

  • pt
  • scanf
  • chang
  • main
  • printf

得分解答快速导航

  • 帖主:wangchuanbin
  • dogdog2005

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo