Chinaunix

标题: 关于指针问题! [打印本页]

作者: Jalen1130    时间: 2005-07-05 12:33
标题: 关于指针问题!
swap(int *p1, int *p2 )
{
     int *p;
     p=p1;p1=p2;p2=p;
}
main()
{
     int a=100,b=50;
     int *i,*j;
     i=& j=&
     if (a>;b)
         swap(i,j);
     print ("%d %d\n",a,b);
     print ("%d %d\n",*i,*j);
}
小弟的本意是将指针i,j所指的内容互换,可是结果:
100 50
100 50
请教!为什么不能换呢???
作者: 黑咖啡不加糖    时间: 2005-07-05 12:41
标题: 关于指针问题!
因为你换得只是指针本身的值,而不是指针指向的数据的值~~
改成

  1. swap(int *p1, int *p2 )
  2. {
  3.     int *p;
  4.     *p=*p1;*p1=*p2;*p2=*p;
  5. }
复制代码

就行了~~
作者: toiby    时间: 2005-07-05 12:55
标题: 关于指针问题!
应该是这样:
  1. void swap(int *p1, int *p2 )
  2. {
  3.     int *p;
  4.     p = (int*)malloc(sizeof(p));
  5.     *p=*p1;*p1=*p2;*p2=*p;
  6. }
复制代码

作者: 黑咖啡不加糖    时间: 2005-07-05 13:10
标题: 关于指针问题!
呵呵~~忘了malloc了~~
作者: Jalen1130    时间: 2005-07-05 13:33
标题: 关于指针问题!
多谢!!!
作者: kernelxu    时间: 2005-07-05 15:14
标题: 关于指针问题!
[quote]原帖由 "toiby"][/quote 发表:

这里用普通变量在栈上分配空间难道不是比用指针在堆上分配空间更高效吗?
  1. void swap(int *p1, int *p2 )
  2. {
  3.    int  p = 0;

  4.    p = *p1;
  5.    *p1 = *p2;
  6.    *p2 = p;
  7. }
复制代码

作者: hbhgsy    时间: 2005-07-05 15:25
标题: 关于指针问题!
问题的关键在于在函数中操作main中的地址是没有效果的,不信你执行一下这段代码:
void Swap(int *p1, int *p2)
{
   int *p;
   p = (int *)malloc(sizeof(p));
   *p = *p1; *p1 = *p2; *p2 = *p;
printf("p is %u, p1 is %u, p2 is %u\n", p, p1, p2);
}
main()
{
   int a = 100, b = 50;
   int *i = &a, *j = &
printf("a address is %u, b address is %u\n", i,j);
   if (a >; b)
   {
      Swap(i,j);
   }
printf("a address is %u, b address is %u\n", i,j);
   printf("a is %d, b is %d\n", a,b);
}
作者: mars198261    时间: 2005-07-05 16:08
标题: 关于指针问题!
*去掉就行了!
作者: 高峰    时间: 2005-07-05 16:24
标题: 关于指针问题!
这是个经典的值传和地址传的例子啊,没有好好看书吧。
作者: 主理想    时间: 2005-07-05 21:08
标题: 关于指针问题!
有这么复杂吗?不就一个排序吗?
作者: mq110    时间: 2005-07-05 21:11
标题: 关于指针问题!
[quote]原帖由 "主理想"]有这么复杂吗?不就一个排序吗?[/quote 发表:


排序...........昏倒.... 抢救我一下吧.
作者: 主理想    时间: 2005-07-05 21:14
标题: 关于指针问题!
swap(int *p1, int *p2 )
{
    int *p;
    p=p1;
p1=p2;
p2=p;
}
main()
{
    int a=100,b=50;
    int *i,*j;
    i=&
    j=&
    if (a>;b)
        swap(i,j);
    print ("%d %d\n",a,b);
    print ("%d %d\n",*i,*j);
}
作者: liujing6484    时间: 2005-07-05 21:15
标题: 关于指针问题!
怎么会差不多了呢,差很远的!
swap函数里的指针p,p1,p2之间只是进行了指针指向关系的改变,当函数运行完返回主函数的时候他们的指向关系并不能传回到主函数啊!
基础不好!
作者: Yarco    时间: 2005-07-06 08:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: sfi    时间: 2005-07-06 13:45
标题: 关于指针问题!
  1. swap(int *p1, int *p2 )
  2. {
  3.     int *p;
  4.     p=p1;p1=p2;p2=p;
  5. }
复制代码


p1,p2都是临时变量,这个函数没修改实参值。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2