leihen0218 发表于 2018-6-7 08:58:38

两个printf输出的值为什么不一样

#include <stdio.h>

int diaohuan(int x, int y);

void main()
{
        int a, b;
        scanf("%d,%d",&a, &b);
       
        diaohuan(a, b);       
}


int diaohuan(int x, int y)
{
        int *p1, *p2, *p;
        p1 = &x;
        p2 = &y;
       
        if(x < y)
        {
                p = p1;
                p1 = p2;
                p2 = p;
               
                printf("大数是%d小数是%d\n",x, y);
                printf("大数是%d小数是%d\n",*p1, *p2);
        }
       
       
}

ba21 发表于 2018-6-7 09:12:50

#include <stdio.h>

int diaohuan(int x, int y);

void main()
{
      int a, b;
      scanf("%d,%d",&a, &b);
      
      diaohuan(a, b);      
}


int diaohuan(int x, int y)
{
      int *p1, *p2, *p;


      p1 = &x;
      p2 = &y;

               printf("大数是%d小数是%d\n",*p1, *p2);
      
      if(x < y)
      {
                p = p1;
                p1 = p2;
                p2 = p;
                                // 这时
                // p1 是p2存放的地址,也就是p2 = &x, *p2 == x
                                // p2 是p1存放的地址,也就是p1 = &y, *p1 == y
                printf("大数是%d小数是%d\n",x, y);
                printf("大数是%d小数是%d\n",*p1, *p2);
      }
      
      
}

BngThea 发表于 2018-6-7 09:17:28

你交换了两个地址

leihen0218 发表于 2018-6-7 14:29:43

BngThea 发表于 2018-6-7 09:17
你交换了两个地址

那按理说x 应该是等于*p1啊,y等于*p2那么
printf("大数是%d小数是%d\n",x, y);
                printf("大数是%d小数是%d\n",*p1, *p2);
输出的结果不应该是一个吗?但是假如输入的是1和5,上边输出的是1,5,下面输出的是5,1,为啥

BngThea 发表于 2018-6-7 14:49:54

leihen0218 发表于 2018-6-7 14:29
那按理说x 应该是等于*p1啊,y等于*p2那么
printf("大数是%d小数是%d\n",x, y);
                print ...

你交换了p1和p2的地址
此时p1指向的是y的地址,而p2指向的是x的地址

另外,不建议这样操作,直接交换地址往往是很危险的操作

leihen0218 发表于 2018-6-7 14:57:07

BngThea 发表于 2018-6-7 14:49
你交换了p1和p2的地址
此时p1指向的是y的地址,而p2指向的是x的地址



那就是p1 == &y; p2 == &x   是不?但是x和y的值是没有变的 只是地址变了 是这个意思不?

BngThea 发表于 2018-6-7 15:17:48

leihen0218 发表于 2018-6-7 14:57
那就是p1 == &y; p2 == &x   是不?但是x和y的值是没有变的 只是地址变了 是这个意思不?

可以这样理解

leihen0218 发表于 2018-6-7 16:00:11

BngThea 发表于 2018-6-7 15:17
可以这样理解

好的 十分感谢,指针好难懂啊{:5_92:}
页: [1]
查看完整版本: 两个printf输出的值为什么不一样