标题:为什么x3和x4的值不互换
只看楼主
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
 问题点数:0 回复次数:16 
为什么x3和x4的值不互换

swap(int x,int y)
{
int x1;
x1=x;
x=y;
y=x1;
printf("%d,%d\n",x,y);
}
void main()
{

int x3=5,x4=6;

swap(x3,x4);
printf("%d,%d\n",x3,x4);
getch();
}

搜索更多相关主题的帖子: void 
2007-05-11 16:19
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
得分:0 
调用swap()时传递进去的参数只是x3,x4的一个副本,交换的只是副本的值
要想交换x3,x4的值就将函数参数改为指针

swap(int *, int *)

猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-05-11 16:26
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:0 
#include<stdio.h>
int swap(int x,int y)
{
int x1;
x1=x;
x=y;
y=x1;
printf("%d,%d\n",x,y);
}
int main()
{
int x3=5,x4=6;
swap(x3,x4);
printf("%d,%d\n",x3,x4);
getch();
return 0;
}

交换了

只不过交换的结果不是第一行,第一行的是swap函数的输出语句(红色部分)

第二行才是交换的结果!

自我放逐。。。
2007-05-11 16:29
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
得分:0 

楼上的那位大哥,主函数中的值没有交换啊.调用函数设为指针类型后好像还是不行撒.
这是我改的:
swap(int *x,int *y)
{
int x1=0;
x1=x;
x=y;
y=x1;

}
void main()
{

int **x3,**x4;
*x3=5;
*x4=6;

swap(**x3,**x4);
printf("%d,%d\n",*x3,*x4);
getch();
}
还是不能互换

[此贴子已经被作者于2007-5-11 16:55:52编辑过]

2007-05-11 16:37
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:0 
以下是引用ycxue46在2007-5-11 16:37:34的发言:
3Q我晓得了



你真的晓得了吗?

我刚才的话没讲明白为什么会这样呢!

调用函数,如果不设置返回的话,那么主函数中的值是不会改变的

换句话说主函数中x=5,y=6没有改变

调用函数,只能将形参的值改变

换句话说:

如果不返回的话

就是主函数的实参可以传递给调用函数的形参,但是调用函数的行参是不能传递给主函数的形参的

但是为什么结果会是我上边讲的那个结果呢?

因为现在的编译器都比较“聪明”(这是程序员偷懒的结果)


如果想要得到这个值的话,就必须要用到指针或者数组来储存值

但是这个就不是调用函数的放回值了(一个函数只能有一个返回值!)


自我放逐。。。
2007-05-11 16:47
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
得分:0 

帮我改一下我看看

2007-05-11 17:01
weishj
Rank: 1
等 级:新手上路
威 望:2
帖 子:141
专家分:0
注 册:2007-4-22
得分:0 

swap(int* x,int* y)
{
int x1;
x1=*x;
*x=*y;
*y=x1;
printf("%d,%d\n",*x,*y);
}
void main()
{

int x3=5,x4=6;

swap(&x3,&x4);
printf("%d,%d\n",x3,x4);
getch();
}


If you shed tears when you miss the sun, you also miss the stars.
2007-05-11 17:07
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
得分:0 

swap(int a[2])
{
int x1;
x1=a[0];
a[0]=a[1];
a[1]=x1;

}
void main()
{

int b[2]={5,6};

swap(b);
printf("%d,%d",b[0],b[1]);
getch();
}
这样也行啊

2007-05-11 17:16
cocojing
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-5-11
得分:0 

因为函数调用时只临时给它分配存储空间,函数执行完就会将存储空间释放
所以不能完成交换
利用地址传递试试

2007-05-11 17:18
ycxue46
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-4-16
得分:0 
利用数组和指针都是地址传递
2007-05-11 17:22



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




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

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