鱼C论坛

 找回密码
 立即注册
查看: 2480|回复: 9

为什么两个值没有交换

[复制链接]
发表于 2019-11-28 16:46:23 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void swap(int *p1,int *p2)
{
        int p;
        p=p1;
        p1=p2;
        p2=p;
}
int main()
{
        int a,b;
        int *pt1,*pt2;
        scanf("%d%d",&a,&b);
        pt1=&a;pt2=&b;
        if(a<b)
        swap(pt1,pt2);
        printf("%d,%d",*pt1,*pt2);
        return 0;
}
输入5,8,结果还是5,8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-28 17:15:06 | 显示全部楼层
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
        int p;
        p=*p1;
        *p1=*p2;
        *p2=p;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-28 17:21:48 | 显示全部楼层

请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2019-11-28 17:47:54 | 显示全部楼层
本帖最后由 liyiqi 于 2019-11-28 17:58 编辑
bin554385863 发表于 2019-11-28 17:21
请认认真真的再好好学一遍指针,不管是看视频查网站还是实体书,请你认真点好不好


我知道真么改,我需要把它讲清楚。谢谢你的提醒,但你要知道我的需求,而不是这样没有针对性的。还有我只是初步学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-28 17:53:37 | 显示全部楼层
windows 发表于 2019-11-28 17:15
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{

谢谢,我知道怎么该。我需要错的原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-28 18:39:03 | 显示全部楼层
#include<stdio.h>
void swap(int *p1,int *p2)
{
        int p;//-------p是普通变量
        p=p1;//-----p1是指针变量
        p1=p2;
        p2=p; //p2是指针变量,p是普通变量
}

书上或者晚上网上或者视频,有说过指针变量和普通变量能够相互赋值么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-28 21:38:55 | 显示全部楼层
本帖最后由 liyiqi 于 2019-11-28 21:40 编辑
bin554385863 发表于 2019-11-28 18:39
#include
void swap(int *p1,int *p2)
{


对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。

#include<stdio.h>
void swap(int *p1,int *p2)
{
        int *p;
        p=p1;
        p1=p2;
        p2=p;
}
int main()
{
        int a,b;
        int *pt1,*pt2;
        scanf("%d%d",&a,&b);
        pt1=&a;pt2=&b;
        if(a<b)
        swap(pt1,pt2);
        printf("%d,%d",*pt1,*pt2);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-28 23:36:44 | 显示全部楼层
liyiqi 发表于 2019-11-28 21:38
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。

#include

你这是根本没弄懂指针的运算符
来不及解释了,swap应该这么写
void swap(int *p1,int *p2)
{
        int p;
        p=*p1;
        *p1=*p2;
        *p2=p;
}
你自己在好好学一下指针,在对照代码,如果还不明白,就查一下资料吧,我是会写不会说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-29 01:06:52 | 显示全部楼层
本帖最后由 18780518304 于 2019-11-29 13:33 编辑
bin554385863 发表于 2019-11-28 23:36
你这是根本没弄懂指针的运算符

你自己在好好学一下指针,在对照代码,如果还不明白,就查一下资料吧,我是 ...


你好我是这么理解的:指针p可以看作存放地址的一个普通变量,
*p相当于调用p这个变量存的地址所指向存储器中的值
void swap(int *p1,int *p2)   //传入两个指针;
{
        int* p;    //p ,p1,p2都是 存储地址值的普通变量;带上*号就可以指向他们地址存储的值了(5,8)
                     //交换普通变量的值(此时是地址值),并没有交换他们所指向的值(5,8)
                    //这样仅仅是将指针当普通变量使用了,但对于普通变量的实参传值给形参,
                    //其实只是将实参的副本传了进去,没有改变真正的实参值。
                   //所以并没有达到你想通过交换地址值来交换两个数的想法。
        p=p1;    
        p1=p2;
        p2=p;
}
//如果你用此方法将其写在主函数中就行
int main(){
    int a,b;
    int *pt1,*pt2;
    scanf("%d%d",&a,&b);
    pt1=&a;pt2=&b;
    int *p;

    if(a<b)
    {
        p=pt1;
        pt1=pt2;
        pt2=p;
    }
    printf("%d,%d",*pt1,*pt2);
    return 0;
}

大佬们勿喷,这只是我的想法,不对请指出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-29 11:51:13 | 显示全部楼层
liyiqi 发表于 2019-11-28 21:38
对不起,复制的时后,少了一点应该是,请你再看一下。解释原因。

#include

你这代码我看了一下,在调用函数之后的printf语句根本就没有执行 ,所以你看到的还是输入的 5  8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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