一个程序的问题

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;
}

...全文
21 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;
}
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

69,382

社区成员

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

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