鱼C论坛

 找回密码
 立即注册
查看: 4724|回复: 7

关于C语言指针的一个问题

[复制链接]
发表于 2013-4-12 17:53:20 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 comethat 于 2013-4-12 17:58 编辑
  1. //题目: 输入a和b两个整数,按先大后小的顺序输出a和b。
  2. void swap(int *p1,int *p2)
  3. {
  4. int *p;

  5. p=p1;
  6. p1=p2;
  7. p2=p;
  8. }

  9. void main()
  10. {
  11. int a,b,*pointer_1,*pointer_2;
  12. scanf("%d %d",&a,&b);

  13. pointer_1=&a;
  14. pointer_2=&b;

  15. if(a<b) swap(pointer_1,pointer_2);

  16. printf("max=%d min=%d\n",*pointer_1,*pointer_2);
  17. }
复制代码

这段程序哪里错了?求解决!我想交换地址,交换值已经明白了

最佳答案

查看完整内容

代码仅供参考
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-12 17:53:21 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. //题目: 输入a和b两个整数,按先大后小的顺序输出a和b。
  4. void swap(int *p1,int *p2)
  5. {
  6.     int *p = NULL;  //这里你要用指针的话,那么这个指针就要对它申请空间

  7.     p = (int *)malloc(sizeof(int));
  8.     if(NULL == p) //出错处理
  9.     {
  10.         printf("内存溢出!\n");
  11.         exit(1);
  12.     }

  13.     *p = *p1;
  14.     *p1 = *p2;
  15.     *p2 = *p;
  16. }

  17. int main(void)
  18. {
  19.     int a,b,*pointer_1,*pointer_2;
  20.     scanf("%d %d",&a,&b);

  21.     pointer_1 = &a;
  22.     pointer_2 = &b;

  23.     if(a<b)
  24.     {
  25.         swap(pointer_1,pointer_2);
  26.     }

  27.     printf("max=%d min=%d\n",*pointer_1,*pointer_2);

  28.     return 0;
  29. }
复制代码
代码仅供参考
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-12 18:16:40 | 显示全部楼层
19行
if(a<b) swap(a,b);
16,17行没用,而且是错的
pointer_1(int)&a;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-12 18:17:37 | 显示全部楼层
额,不小心等号漏了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-12 18:19:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-12 18:40:02 | 显示全部楼层
不用了 我自己解决了!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-12 21:55:50 | 显示全部楼层
小亮1201 发表于 2013-4-12 20:38
代码仅供参考

虽然还没学到这么多,但是谢谢帮助!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-13 23:57:46 | 显示全部楼层
你选的最佳答案那里有一点小错误,不应该给局部变量p申请动态内存分配的,这是多余的,他申请之后没用free释放,会造成内存泄漏,正确的做法直接在你的程序swap()函数中把指针解引用:即
*p = *p1;
*p1 = *p2;
*p2 = *p;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-3 15:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表