用指针判断大小,为什出不来结果?

酱料& 2021-03-10 10:47:00
#include<stdio.h> void adjust(int *p1,int *p2) { int *p3; if(*p1<*p2) { p3=p1; p1=p2; p2=p3; } } int main() { int a1,a2,*math1,*math2; math1=&a1; math2=&a2; scanf("%d%d\n",&a1,&a2); adjust(math1,math2); printf("%d%d\n",*math1,*math2); return 0; }
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-03
  • 打赏
  • 举报
回复
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html
forever74 2021-03-12
  • 打赏
  • 举报
回复
这个代码的精神内核相当于: 宿舍老二(乙)身高没有老大(甲)的高。 后来发现老二的年龄弄错了,实际上他年龄更大,所以他才是老大,原来的老大应该是老二。 这和身高没啥关系呀。
自信男孩 2021-03-12
  • 打赏
  • 举报
回复
if(*p1<*p2)
{
p3=p1;
p1=p2;
p2=p3;
}


这个swap(交换)只是交换了局部变量p1, p2里面的值(地址值),并没有把交换调用函数里的p1, p2指向的内存内容;
xian0-666 2021-03-11
  • 打赏
  • 举报
回复
深入学学指针和引用,以及函数作用域和返回值
qzjhjxj 2021-03-10
  • 打赏
  • 举报
回复
供参考:
#include<stdio.h>
void adjust1(int *p1,int *p2)//指针p1 p2作用域在本函数内,所以改变他们的值,
                            //并不能传回给math1 math2,所以是无效的。
{
    int *p3;
    if( *p1 < *p2)
    {
        p3 = p1;
        p1 = p2;
        p2 = p3;
    }
}

void adjust2(int *p1,int *p2)//对指针所指向的值操作是有效的
{
    int p3;
    if(*p1<*p2)
    {
         p3 = *p1;
        *p1 = *p2;
        *p2 = p3;
    }
}

int main()
{
   int a1,a2,*math1,*math2;
   math1=&a1;
   math2=&a2;
   scanf("%d %d",&a1,&a2);//scanf("%d%d\n",&a1,&a2);这里多了'\n'
   
   adjust1(math1,math2);
   printf("adjust1:%d %d\n",*math1,*math2);

   adjust2(math1,math2);
   printf("adjust2:%d %d\n",*math1,*math2);
   
   return 0;
}

70,037

社区成员

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

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