| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1603 人关注过本帖
标题:为甚么交换不成?
只看楼主 加入收藏
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
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
堆空间在使用完毕后释放掉了

Code is my life.
2017-01-08 17:14
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
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 13楼 see235959850
嗯嗯,原理是一样的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 17:21
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 11楼 see235959850
对啊~不过实参是一个指针~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 17:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 12楼 bjut_Allen
那个应该叫做"栈空间吧",栈和堆的定义,最好上网搜一下~

栈空间是系统本身预备,可以随时拿来用的~堆空间应该是指malloc开辟出来的一类空间~~
这个我也说不透,最好上网搜一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 17:24
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
收藏
得分:0 
p1和p2是局部参数,改变不了x1和x2.返回值的办法我觉得不行,去掉函数改成这样就行了。
#include<stdio.h>
int *x1,*x2;


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

    return 0;
}


我是硬件工程师
2017-01-08 17:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 17楼 qdcs
笑了~全局变量可以无视本文件的作用范围影响~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-08 18:00
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
回复 16楼 九转星河
嗯打错了

Code is my life.
2017-01-08 18:02
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:0 
int fun(int a);
fun(x);
a是形参,x是实参,此时x不会因a的改变而改变。

int fun(int *a);
fun(x);
a是形参,x是实参,此时x会因a的改变而改变。

int a;
int *p=&a; 指针p表达一个数a的地址,*p为a的数值。

p本身也是一个数
int **q=&p,指针q表达指针p的地址,*q为p的数值。

2017-01-08 19:52
快速回复:为甚么交换不成?
数据加载中...
 
   



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

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