| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1663 人关注过本帖
标题:为甚么交换不成?
取消只看楼主 加入收藏
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
结帖率:100%
收藏
 问题点数:0 回复次数:6 
为甚么交换不成?
程序代码:
#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
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
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
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
这还是相当于交换了实参啊
以下是引用吹水佬在2017-1-8 16:49:54的发言:

#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-1-8 17:03编辑过]

2017-01-08 17:02
see235959850
Rank: 2
等 级:论坛游民
帖 子:380
专家分:29
注 册:2016-12-21
收藏
得分:0 
回复 2楼 九转星河
是不跟这个一样
程序代码:
void change(int x, int y)
{
    int t;
    t = x;
    x = y;
    y = t;
}

#include<stdio.h>
int main()
{
    void change(int x, int y);
    int a = 1, b = 3;
    if (a < b)
        change(a, b);
    printf("%d %d\n", a, b);
    return 0;
}
2017-01-08 17:20
快速回复:为甚么交换不成?
数据加载中...
 
   



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

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