鱼C论坛

 找回密码
 立即注册
查看: 2608|回复: 8

关于两个数交换的问题。

[复制链接]
发表于 2019-6-10 16:30:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么用交换地址的方法就改变不了在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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-10 16:58:53 | 显示全部楼层
int *x,int *y 同样是两个临时变量,你把他们两个交换有什么意义呢,也没有改变内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-11 08:27:09 | 显示全部楼层
本帖最后由 1809228982 于 2019-6-11 08:28 编辑
菜鸟小乔 发表于 2019-6-10 23:07
1、指针交换的是地址,地址里的内容没有变。想象一下,x,y是两座房子,x房子住着a,坐落于村东头;y房子住着 ...


交换地址

交换地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 11:01:50 | 显示全部楼层
可以使用异或
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-11 13:03:54 From FishC Mobile | 显示全部楼层
1809228982 发表于 2019-6-11 08:27

main函数里面的x y  aswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印它们的地址是不一样的,所以你交换awsp函数里面的x  y的值对main函数里面的x y是没有影响的,还有能交换的只有变量里面的值,变量本身的地址是不能交换的,也就是你说不可能让x的地址变成y的地址的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-12 09:59:48 | 显示全部楼层
本帖最后由 1809228982 于 2019-6-12 10:14 编辑


怎么用呢?可以写出来给我看看吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-12 10:00:56 | 显示全部楼层
wjp 发表于 2019-6-11 13:03
main函数里面的x y  aswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印 ...

噢,临时变量,我忘记是形参了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 21:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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