免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1556 | 回复: 15
打印 上一主题 下一主题

一个小问题,有点不解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-05 17:10 |只看该作者 |倒序浏览
m a i n ( )
{
     void chang();
     int *p1,*p2,a,b,*t;
     s c a n f ( " % d , % d " , & a , & b ) ;
     p 1 = & a ;
     p 2 = & b ;
     c h a n g ( p 1 , p 2 ) ;
     p r i n t f ( " % d , % d \ n " , * p 1 , * p 2 ) ;
}

void chang(int *pt1,int *pt2)
{
    int *t;
    if (*pt1<*pt2)
    {
       t=pt1; pt1=pt2; p t 2 = t ;
    }
       r e t u r n ;
}

在函数chang中已经把指针指向交换了,为什么在打印时还是没能交换输入的两个数呢?难道这种交换仅在chang函数内有效?如果在chang函数中把这两个指针return回去,会不会达到交换的目的呢?
问题有点弱,请各位老大别笑我,呵呵,谢谢。

论坛徽章:
0
2 [报告]
发表于 2004-12-05 17:19 |只看该作者

一个小问题,有点不解

交换指针并不等于交换了指针指向的数据。呵呵,楼主需要好好理解指针的概念。

论坛徽章:
0
3 [报告]
发表于 2004-12-05 17:28 |只看该作者

一个小问题,有点不解

p1指向a,P2指向b,我把P1、P2的指向交换了,那就成了P1指向b,P2指向a,那打印*P1的时候,就应该打印出b来呀。

论坛徽章:
0
4 [报告]
发表于 2004-12-05 17:35 |只看该作者

一个小问题,有点不解

我在这个论坛上第三次强调,
如果想交换两个对象的值,请用该对象的指针。
如果想交换两个指针的值,请用指针的指针。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-12-05 17:40 |只看该作者

一个小问题,有点不解

你输出p1,p2, pt1,pt2的地址,
看看它们是不是一样的。

论坛徽章:
0
6 [报告]
发表于 2004-12-05 17:48 |只看该作者

一个小问题,有点不解

是这样吗?

    int **t;
      if( *p1<*p2 )
      {
            t=&p1;&p1=&p2;&p2=t;
       }

论坛徽章:
0
7 [报告]
发表于 2004-12-05 17:59 |只看该作者

一个小问题,有点不解

原帖由 "凝神" 发表:
是这样吗?

    int **t;
      if( *p1<*p2 )
      {
            t=&p1;&p1=&p2;&p2=t;
       }

再向前想一想。想想flw的话。

论坛徽章:
0
8 [报告]
发表于 2004-12-05 18:35 |只看该作者

一个小问题,有点不解

m a i n ( )
{
void chang();
int *p1,*p2,a,b,*t;
s c a n f ( " % d , % d " , & a , & b ) ;
p 1 = & a ;
p 2 = & b ;
c h a n g ( p 1 , p 2 ) ;
p r i n t f ( " % d , % d \ n " , * p 1 , * p 2 ) ;
p r i n t f ( " % d , % d \ n " ,  p 1 , p 2 ) ;
}

void chang(int *pt1,int *pt2)
{
int *t;
if (*pt1<*pt2)
{
t=pt1; pt1=pt2; p t 2 = t ;
}
p r i n t f ( " % d , % d \ n " , * p t1 , * p t2 ) ;
r e t u r n ;
}


我试了一下,输入:1,2,输出:2 ,1 ;1 ,2;2147481620,2147281616。

输出的第一个结果不是已经把输入交换了吗?但第二个输出没明白怎么回事。
小弟有点笨,麻烦点解一下。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-12-05 18:51 |只看该作者

一个小问题,有点不解

让你把它们的地址都打印出来,你怎么不听你呢?
给你一段代码,你看看和你的区别在哪里。

  1. #include <stdio.h>;
  2. int
  3. main ( )
  4. {
  5.         void chang(int **, int **);
  6.         int *p1,*p2,a,b,*t;
  7.         scanf("%d,%d" , &a, &b) ;
  8.         p1 = &a ;
  9.         p2 = &b ;
  10.         chang( &p1 , &p2 ) ;
  11.         printf( "%d, %d \n" , *p1 , *p2 ) ;
  12.         return 0;
  13. }

  14. void chang(int ** pt1,int **pt2)
  15. {
  16.         int * t;
  17.         if (**pt1 < **pt2)
  18.         {
  19.                 t = *pt1;
  20.                 *pt1 = *pt2;
  21.                 *pt2 = t ;
  22.         }
  23.         return ;
  24. }
复制代码

还有以后贴代码要用code标签。
看你的代码有多恶劣。

论坛徽章:
0
10 [报告]
发表于 2004-12-05 18:59 |只看该作者

一个小问题,有点不解

谢谢。。。
我刚才不知道怎么使用CODE标签,我也觉得那样贴着很难看。不好意思不好意思。。。下次一定注意。呵呵。[/code]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP