| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1618 人关注过本帖
标题:为甚么交换不成?
只看楼主 加入收藏
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
结帖率:100%
收藏
 问题点数:0 回复次数:21 
为甚么交换不成?
程序代码:
#include<stdio.h>
void swap(int *p1, int *p2)
{
    int *t;
    t = p1;
    p1 = p2;
    p2 = t;
}

int main()
{
    void swap(int *p1, int *p2);
    int a, b;
    int *x1 = &a, *x2 = &b;
    scanf_s("%d%d", &a, &b);
    if (a < b)
        swap(x1, x2);
    printf("%d %d\n", *x1, *x2);
    return 0;
}

2017-01-08 16:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
交换指针并不能改变实参内容~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 16:31
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
回复 2楼 九转星河
指针不是已经交换了吗?
这个可以交换,为什么上面的不行
程序代码:
#include<stdio.h>
void swap(int *p1, int *p2)
{
    int *t;
    t = p1;
    p1 = p2;
    p2 = t;
    printf("%d %d\n", *p1, *p2);
}

int main()
{
    void swap(int *p1, int *p2);
    int a, b;
    int *x1, *x2;
    scanf_s("%d%d", &a, &b);
    x1 = &a;
    x2 = &b;
    if (a < b)
        swap(x1, x2);
    return 0;
}
2017-01-08 16:39
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
回复 2楼 九转星河
难道要声明全局变量?
2017-01-08 16:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 see235959850
以下是引用see235959850在2017-1-8 16:39:19的发言:

指针不是已经交换了吗?
这个可以交换,为什么上面的不行
#include<stdio.h>
void swap(int *p1, int *p2)
{
    int *t;
    t = p1;
    p1 = p2;
    p2 = t;
    printf("%d %d\n", *p1, *p2);
}

int main()
{
    void swap(int *p1, int *p2);
    int a, b;
    int *x1, *x2;
    scanf_s("%d%d", &a, &b);
    x1 = &a;
    x2 = &b;
    if (a < b)
        swap(x1, x2);
    return 0;
}

你把printf放到main里面试试~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 16:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
相当于
fun(int a,int b)
{
    int t=0;
    t=a;
    a=b;
    b=t;
}
这是单向传递,实参的值不变~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 16:48
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>
void swap(int **p1, int **p2)
{
    int *t;
    t = *p1;
    *p1 = *p2;
    *p2 = t;
}
main()
{
    int a=1, b=2;
    int *p1=&a, *p2=&b;
    printf("%d %d\n", *p1, *p2);
    swap(&p1, &p2);
    printf("%d %d\n", *p1, *p2);
}
2017-01-08 16:49
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
回复 5楼 九转星河
程序代码:
#include<stdio.h>
int *p1, *p2;
void swap()
{
    int *t;
    t = p1;
    p1 = p2;
    p2 = t;
    
}

int main()
{
    void swap();
    int a, b;
    scanf_s("%d%d", &a, &b);
    p1 = &a;
    p2 = &b;
    if (a < b)
        swap();
    printf("%d %d\n", *p1, *p2);
    return 0;
}

这样可以
2017-01-08 16:52
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
回复 7楼 吹水佬
这都可以
2017-01-08 16:53
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43038
注 册:2014-5-20
收藏
得分:0 
以下是引用see235959850在2017-1-8 16:53:33的发言:

这都可以

参数“形”、“实”问题。
变量作用域问题。
2017-01-08 16:57
快速回复:为甚么交换不成?
数据加载中...
 
   



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

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