C++函数的问题

[复制链接]
查看11 | 回复5 | 2008-8-19 14:37:05 | 显示全部楼层 |阅读模式
#include
void swap(int x,int y)
{
int t=x;
x=y;
y=t;
}
void main()
{
int a=3,b=4;
swap(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
}
为何输出结果是“a=3,b=4”而不是“a=4,b=3”?求教

回复

使用道具 举报

千问 | 2008-8-19 14:37:05 | 显示全部楼层
函数调用时传入的时x,y的值,在函数里面改变x和y的值调用者是不知道的,也就是说swap里面并不能改变x,y的值,要在函数中改变变量的值时传入变量的地址void swap(int *x, int *y){int t = *x;*x = *y;*y = t;}void main(){int a=3,b=4;swap(&a, &b);cout<<"a="<<a<<",b="<<b<<endl;}...
回复

使用道具 举报

千问 | 2008-8-19 14:37:05 | 显示全部楼层
在调用函数swap()时,实际上swap()函数体会建立两个临时变量x,y;然后,把外面声明的a,b的值传递给x,y作为值来运算;所以,实际上,a,b的值并没有改变。...
回复

使用道具 举报

千问 | 2008-8-19 14:37:05 | 显示全部楼层
你传的是什么?自己想想.........不用指针,SWAP后的结果,回的到main()里吗?...
回复

使用道具 举报

千问 | 2008-8-19 14:37:05 | 显示全部楼层
楼主的这种调用方法是传值调用,其中ab相当于swap函数中的局部变量,他和主函数中的ab分别在不同的空间,即使把函数中的ab的值交换了,但无法改变主函数中的ab的值;在C++中,如果一个函数要改变该函数的调用函数中2个或两个以上的值就必须使用传址调用(地址传递)这样,函数中的变量和调用函数的变量通过地址传递,指向的是同一空间内的数据,当然,如果只需要...
回复

使用道具 举报

千问 | 2008-8-19 14:37:05 | 显示全部楼层
值传递,引用(指针)传递,方式是不一样的.具体自己看书...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行