C语言小问题

swap(intx,inty){inttemp;temp=x;x=y;y=temp;}为什么不能实现x和y值交换啊... swap(int x,int y)
{int temp;
temp=x;
x=y;
y=temp;
}
为什么不能实现x和y值交换啊
展开
 我来答
清心又谦恭丶布丁9
2009-08-16 · TA获得超过6605个赞
知道小有建树答主
回答量:1247
采纳率:100%
帮助的人:1882万
展开全部
这样说吧
比如你的主函数里
int a=3;
int b=4;
swap(a,b);

楼主注意看
此时a=3,x=a=3,等于a的数值
所以此时a=3,x=3
同理
b=4,y=4.
而当你在自定义函数交换的时候,只是x和y交换
交换后x=4,y=3,而a,b没有发生任何变化

通过这个例子我们发现,传值不影响主函数的值

为什么指针可以改变呢

还是通过这个例子

int a=3,b=4;
int *p,*q;
p=&a,q=&b;
swap(p,q);

swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
我们来分析一下,这时的p,x都指向a的地址
q,y都指向b的地址
当经过自定义函数的时候
a和b的值对调了一下。
还不清楚可以hi我
匿名用户
2009-08-17
展开全部
函数定义时参数表中的参数称为形式参数,简称形参,函数调用时参数表中的参数称为实际参数,简称实参,实参和形参之间的数据传递称为形实结合,通常情况下c语言是值传递,值传递是单向的,即参数的值只能由实参传递给形参,而不能反过来由形参传递给值参,也就是说,从被调用函数的角度来看,参数的值只能传入不能传出。值传递时实参可以是具体的数值、已经有值的变量和可求值的表达式,由于数值和变量都是表达市的一种,因此,值传递时实参本质上是表达式。当函数被调用时,系统首先对实参表达式球值,然后将值传递给形参,换过一种思路,值传递时,形参实际上是实参的一份拷贝,所以传递时不会改变外部变量实参的值

vc2008

#include "stdafx.h"
#include <stdio.h>

void swap(int &a,int &b)
{
int c;
c=a;
a=b;
b=c;

}

int main(int argc, _TCHAR* argv[])
{
int a,b;
scanf("%d%d",&a,&b);
swap(a,b);
printf("%d,%d",a,b);
while(1);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d9f7b5b86
2009-08-16 · 贡献了超过114个回答
知道答主
回答量:114
采纳率:0%
帮助的人:0
展开全部
C,c++语言里,在函数里的数据都是局部变量,当函数结束时,除了返回值外,其它的局部变量都自动消失了。注意,swap里的变量x,y与外部给的实参属于两个变量,被存放在不同的地址里,一次该变一个变量,当然不会改变另一个变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shell_way
2009-08-16
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
C语言的函数传参是按值传递的,就是在给函数传递变量或是常量的时候会在堆栈上创建一个副本,你修改的是副本的值,函数结束后全部销毁,怎么会对实际的x,y产生影响呢?
用指针吧如 贵族特困生 说得一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
www5255555
2009-08-16 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:0
展开全部
函数的X,Y是交换了,但外部的X,Y没交换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式