1809228982 发表于 2019-6-10 16:30:55

关于两个数交换的问题。

为什么用交换地址的方法就改变不了在main函数里的值呢?而使用间接运算符的就可以。
代码(交换地址版)
#include <stdio.h>

void swap(int *x, int *y)
{
    int *t = x;
    x = y;
    y = t;
    printf("交换中:\n");
    printf("x = %d, x = %p\n",*x, x);
    printf("y = %d, y = %p\n",*y, y);
}

int main()
{
    int x = 3;
    int y = 5;
    printf("交换前:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);
    swap(&x,&y);
    printf("交换后:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);
   
    return 0;
}

代码(间接运算符)
#include <stdio.h>

void swap(int *x, int *y)
{
    int t = *x;
    *x = *y;
    *y = t;
    printf("交换中:\n");
    printf("x = %d, x = %p\n",*x, x);
    printf("y = %d, y = %p\n",*y, y);
}

int main()
{
    int x = 3;
    int y = 5;
    printf("交换前:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);
    swap(&x,&y);
    printf("交换后:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);

    return 0;
}

Krant5 发表于 2019-6-10 16:58:53

int *x,int *y 同样是两个临时变量,你把他们两个交换有什么意义呢,也没有改变内容

bin554385863 发表于 2019-6-10 19:47:05

本帖最后由 bin554385863 于 2019-6-10 19:49 编辑

#include <stdio.h>

void swap(int *x, int *y)
{
    int *t = x;
    x = y;
    y = t;//这里x是指针,你用*t = x相当于二级指针,t和x都是指针他们的值都是地址,x=y y=t,你用地址交换地址是什么鬼?,你改变的是指针指向的地址,然而内存地址是不可改变的
    printf("交换中:\n");
    printf("x = %d, x = %p\n",*x, x);
    printf("y = %d, y = %p\n",*y, y);
}

int main()
{
    int x = 3;
    int y = 5;
    printf("交换前:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);
    swap(&x,&y);
    printf("交换后:\n");
    printf("x = %d, &x = %p\n",x, &x);
    printf("y = %d, &y = %p\n",y, &y);
   
    return 0;
}

菜鸟小乔 发表于 2019-6-10 23:07:53

1、指针交换的是地址,地址里的内容没有变。想象一下,x,y是两座房子,x房子住着a,坐落于村东头;y房子住着b坐落于村西头。交换地址相当于x,y两座房子交换了地址,也就是a和他的房子x搬到村西头;b和他的房子y搬到村东头(人在房子里,房子和人同时搬的),所以你去x房子,找到的还是a,去y房子找到的还是b,不论房子搬去哪里,里面住的人都没变。
2、间接运算符,交换的是地址里的内容(房子里的人),所以交换后,你去x房子找到了b,去y房子,找到了a。

1809228982 发表于 2019-6-11 08:27:09

本帖最后由 1809228982 于 2019-6-11 08:28 编辑

菜鸟小乔 发表于 2019-6-10 23:07
1、指针交换的是地址,地址里的内容没有变。想象一下,x,y是两座房子,x房子住着a,坐落于村东头;y房子住着 ...

lh1996 发表于 2019-6-11 11:01:50

可以使用异或{:5_91:}

wjp 发表于 2019-6-11 13:03:54

1809228982 发表于 2019-6-11 08:27


main函数里面的x yaswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印它们的地址是不一样的,所以你交换awsp函数里面的xy的值对main函数里面的x y是没有影响的,还有能交换的只有变量里面的值,变量本身的地址是不能交换的,也就是你说不可能让x的地址变成y的地址的

1809228982 发表于 2019-6-12 09:59:48

本帖最后由 1809228982 于 2019-6-12 10:14 编辑

lh1996 发表于 2019-6-11 11:01
可以使用异或

怎么用呢?可以写出来给我看看吗?

1809228982 发表于 2019-6-12 10:00:56

wjp 发表于 2019-6-11 13:03
main函数里面的x yaswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印 ...

噢,临时变量,我忘记是形参了{:10_266:}
页: [1]
查看完整版本: 关于两个数交换的问题。