标题:这为啥无法交换
只看楼主
帝师
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:166
专家分:92
注 册:2018-10-11
结帖率:92.31%
 问题点数:0 回复次数:5 
这为啥无法交换
#include<stdio.h>
int main()
{
    void swap(int *p1,int *p2);
    int a,b;
    int *p1,*p2;
    scanf("%d %d",&a,&b);
    p1=&a;
    p2=&b;
    if(*p1<*p2)
    swap(p1,p2);
    printf("%d %d\n",*p1,*p2);
    return 0;
}
void swap(int *p1,int *p2)
{
    int t;
    {t=p1;p1=p2;p2=t;}
}
搜索更多相关主题的帖子: 交换 int void printf return 
2018-12-10 10:40
卡森
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2018-12-10
得分:0 
给出一个运行结果, 应该是SWP()函数里面的交换有问题
2018-12-10 10:56
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
得分:0 

【思路错误】:主函数传递给调用函数的指针,只是地址的数值,在调用函数中的指针,并非是主函数的指针,只是具有复制过来的一样的数值(地址)罢了,你可以给调用函数这两个指针取不一样的变量名也是可行的,因为是完全不一样的个体,克隆的个体不是本体,就这个概念。在调用函数完成行为后,函数体内的自动管理变量被释放,该交换行为没有对main函数内的指针本身造成任何影响。

想对主函数的指针变量进行行为操作,需要传递该指针的地址,才能在调用函数对该指针本身进行操作,而不是传递该指针的数值,虽然该指针的数值实际上是一个变量的地址。(这本质上和“想对主函数的某个变量进行操作,应当传递该变量的地址,而不是变量的数值”这个思路是一样的)

【行为不妥】:另外,既然是作为指针的中转,声明中转变量应当是一个指针变量,而不是一个整型数值变量。

2018-12-10 12:53
goddog312
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2018-11-28
得分:0 
中转变量应该是指针,或者将地址解引用后使用。
2018-12-10 20:49
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
还用。应该是
int t=*p1;
*p1=*p2;
*p2=t;
2018-12-10 22:26
帝师
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:166
专家分:92
注 册:2018-10-11
得分:0 
回复 5楼 花脸
我知道了谢谢

I am the voice of the next generation
Completely digital
Create synthetic auras
2018-12-11 07:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491935-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097038 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved