| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1518 人关注过本帖
标题:排序函数交换变量数值后
只看楼主 加入收藏
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
收藏
 问题点数:0 回复次数:11 
排序函数交换变量数值后
这个函数为什么我输入3,2,1,结果还是3,2,1  ,而不是1,2,3?swap函数不就是在交换变量的数值吗?
#include <stdio.h>
int main()
{void swap(int ,int );
int n1,n2,n3;

scanf("%d%d%d",&n1,&n2,&n3);

if(n1>n2) swap(n1,n2);
if(n1>n3) swap(n1,n3);
if(n2>n3) swap(n2,n3);

printf("%d,%d,%d\n",n1,n2,n3);

return 0;
}

void swap(int n,int m)
{int t;
t=n;n=m;m=t;
}
搜索更多相关主题的帖子: include return 
2017-01-24 21:05
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
函数接受的是值的复制,所以不会改变调用函数中变量的值,要改变调用函数中变量的值,你需要传递变量的地址。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-01-24 21:09
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
改变形参的值不影响实参~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-24 21:10
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
收藏
得分:0 
回复 3楼 九转星河
请问为什么我的实参数值没有传递给形参?怎么就表示传递了呢?
2017-01-24 21:36
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
程序代码:
#include <stdio.h>
#include<stdlib.h>
int main()
{void swap(int *n,int *m);
int n1,n2,n3;

scanf("%d%d%d",&n1,&n2,&n3);

if(n1>n2) swap(&n1,&n2);           //&  &
if(n1>n3) swap(&n1,&n3);
if(n2>n3) swap(&n2,&n3);

printf("%d,%d,%d\n",n1,n2,n3);

return 0;
}

void swap(int *n,int *m)       //int *n, int *m
{
  int t;                   //int t 
  t=*n;
  *n=*m;
  *m=t;
}

早知做人那么辛苦!  当初不应该下凡
2017-01-24 21:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 troyzyc
本例是单向传递~实参传给形参~在函数调用后形参就释放了~到底是形参的地址和实参不同~形参的地址是调用函数时临时生成的~调用同一个函数的同一个参数~即使实参地址相等~形参地址一般情况下也是不相等的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-01-24 21:55
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
回复 4楼 troyzyc
实参复制一遍给形参,函数在结束时清除存储空间,形参的值不会被保留,形参的改变自然不会影响实参。。

Code is my life.
2017-01-24 22:14
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
收藏
得分:0 
回复 7楼 bjut_Allen
那为什么五楼的程序就不会被是释放掉呢?
2017-01-25 15:47
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:0 
回复 8楼 troyzyc
if(n1>n2) swap(&n1,&n2);           
if(n1>n3) swap(&n1,&n3);
if(n2>n3) swap(&n2,&n3);
传的是地址,函数中的指针直接访问变量所在地址,更改变量的数值。此时也是把实参复制,但这次复制的不是实参数值而是复制的是变量所在地址

Code is my life.
2017-01-25 20:54
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
这样看看就清楚:此n不是彼n。
#include <stdio.h>

void fun(int n)
{
    printf("%d\n", &n);   
}

main()
{
    int n=0;
    printf("%d\n", &n);
    fun(n);
}
2017-01-25 21:28
快速回复:排序函数交换变量数值后
数据加载中...
 
   



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

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