一个程序的问题

ypeaker 2003-10-09 09:45:14
谁能告诉我,为什么下面的swap函数无法交换 p_1,p_2,p_3的地址?谢谢!

main ()
{
int n1,n2,n3;
int *p_1,*p_2,*p_3;
printf("请输入三个数 n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
p_1=&n1;
p_2=&n2;
p_3=&n3;
if (n1>n2) swap(p_1,p_2);
if (n1>n3) swap(p_1,p_3);
if (n2>n3) swap(p_2,p_3);
printf("n1=%d,n2=%d,n3=%d\n",*p_1,*p_2,*p_3);

}

swap(p1,p2)
int *p1,*p2;
{
int *p;
p=p1;p1=p2;p2=p;
}

...全文
20 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Depress 2003-10-11
  • 打赏
  • 举报
回复
程序的本意是实现3个数的比较,并输出。
内存地址是不能改变的,变的只能是指针变量里的内容。
主调函数和被调函数之间的数据传递有两种:
1。值传递。但是单向的。
2. 利用指针和引用。
Depress 2003-10-11
  • 打赏
  • 举报
回复
#include <stdio.h>
int main (void)
{
int swap (int *p1,int *p2);
int n1,n2,n3;
int *p_1,*p_2,*p_3;
printf("请输入三个数 n1,n2,n3:");
scanf("%d,%d,%d\n",&n1,&n2,&n3);
p_1=&n1;
p_2=&n2;
p_3=&n3;
if (n1>n2) swap(p_1,p_2);
if (n1>n3) swap(p_1,p_3);
if (n2>n3) swap(p_2,p_3);

printf("n1=%d,n2=%d,n3=%d\n",*p_1,*p_2,*p_3);
return 0;
}

int swap(int *p1, int *p2)
{
int p;
p=*p1;*p1=*p2;*p2=p;
return (*p1,*p2);
}
zerogotosum 2003-10-11
  • 打赏
  • 举报
回复
main ()
{
int n1,n2,n3;
int *p_1,*p_2,*p_3;
printf("请输入三个数 n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
p_1=&n1;
p_2=&n2;
p_3=&n3;
if (n1>n2) swap(p_1,p_2);
if (n1>n3) swap(p_1,p_3);
if (n2>n3) swap(p_2,p_3);
printf("n1=%d,n2=%d,n3=%d\n",*p_1,*p_2,*p_3);

}

swap(p1,p2)
int *p1,*p2;
{
int *p;
*p=*p1;*p1=*p2;*p2=*p;}



xiaolei1128 2003-10-10
  • 打赏
  • 举报
回复
调用完swap函数就释放该内存单元,原来的实参没有改变
Depress 2003-10-10
  • 打赏
  • 举报
回复
up
lh198020002000 2003-10-09
  • 打赏
  • 举报
回复
行参的改变不影响实参
woshijiechu 2003-10-09
  • 打赏
  • 举报
回复
同意火鸟先生的话
wgzh 2003-10-09
  • 打赏
  • 举报
回复
楼主的swap程序什么也没有改变~
wgzh 2003-10-09
  • 打赏
  • 举报
回复
我上面的回答有错。

被这句话误导了“谁能告诉我,为什么下面的swap函数无法交换 p_1,p_2,p_3的地址?”

重新解答如下:

首先你问的问题就有错,p_1,p_2,p_3是3个指针变量,自从定义他们后就被分配了固定的内存地址,所以他们的地址不能改变,但是他们的值(指向的内容)可以改变的。所以我估计楼主的意思是想改变p_1,p_2,p_3所指的值,那样的话按ssbull(初学者)所改就可以了。
ssbull 2003-10-09
  • 打赏
  • 举报
回复
你的做法只是交换了两个指针的地址值,并没有交换两个指针所指的对象。
你做如下改变即可:
void swap(int *pa,int *pb) {
int tmp;
tmp=*pa;*pa=*pb;*pb=tmp;
}
wgzh 2003-10-09
  • 打赏
  • 举报
回复
函数不能改变参数本身的值~
wgzh 2003-10-09
  • 打赏
  • 举报
回复
改成下面就可以了:
void swap(int **p1,int **p2)
{
int *p;
p=*p1;*p1=*p2;*p2=p;
}

int main ()
{
int n1,n2,n3;
int *p_1,*p_2,*p_3;
printf("请输入三个数 n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
p_1=&n1;
p_2=&n2;
p_3=&n3;
if (n1>n2) swap(&p_1,&p_2);
if (n1>n3) swap(&p_1,&p_3);
if (n2>n3) swap(&p_2,&p_3);
printf("n1=%d,n2=%d,n3=%d\n",*p_1,*p_2,*p_3);

return 0;
}


playboyxp 2003-10-09
  • 打赏
  • 举报
回复
main ()
{
int n1,n2,n3;
int *p_1,*p_2,*p_3;
printf("请输入三个数 n1,n2,n3:");
scanf("%d,%d,%d",&n1,&n2,&n3);
p_1=&n1;
p_2=&n2;
p_3=&n3;
if (n1>n2) swap(p_1,p_2);
if (n1>n3) swap(p_1,p_3);
if (n2>n3) swap(p_2,p_3);
printf("n1=%d,n2=%d,n3=%d\n",*p_1,*p_2,*p_3);

}

swap(p1,p2)
int *p1,*p2;
{
int *p;
*p=*p1;*p1=*p2;*p2=*p;//交换得是指针指向得内容不是交换指针本身得内容
}


existsluawjb 2003-10-09
  • 打赏
  • 举报
回复
应该是交换这些指针的值,也就是变量的地址
swap应该这样写
swap(p1,p2)

{
int *p;
p=p1;
p1=p2;
p2=p;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧