| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:请教一个关于c++函数值传递的问题
只看楼主 加入收藏
buyanyu4689
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-22
结帖率:0
收藏
已结贴  问题点数:0 回复次数:7 
请教一个关于c++函数值传递的问题
#include<iostream>
using namespace std;
void swap(int a , int b)
{
    int t=a;
    a=b;
    b=t;

}
int main()
{

int x=5,y=10;
cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<"y="<<y<<endl;
return 0;
}
运行程序 结果 是
x=5y=10
x=5y=10
说明函数调用时传递的是实参的值  单向传递
  我要是先写主函数  然后再定义swap函数结果就是
x=5y=10
y=10x=5
如果我在主函数中声明一下函数
结果就又回去了
请问谁知道这是怎么一回事啊
搜索更多相关主题的帖子: void void 
2011-06-22 18:35
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:3 
说明函数调用时传递的是实参的值  单向传递

函数调用是复制传值的
  我要是先写主函数  然后再定义swap函数结果就是
x=5y=10
y=10x=5

不知道你是怎么写的,可以实现这样的功能
如果我在主函数中声明一下函数

函数声明需要放到全局作用域中,不能放到某个函数的作用域中

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-06-22 22:23
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:3 
“我要是先写主函数  然后再定义swap函数结果就是
x=5y=10
y=10x=5

我也想知道为啥?和楼主同等········
2011-06-22 22:28
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
收藏
得分:3 
调用函数时首先调用自己声明的函数,没有找到才使用默认的函数,第二个里面swap没有在调用之前声明,当然使用系统默认的swap函数了
系统有一个自带的swap函数,不信你把第二个的swap函数注释掉,依然可以运行,而且是正确的交换结果

#include<iostream>
using namespace std;
//void swap(int a,int b);
int main()
{
int x=5,y=10;
cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<"y="<<y<<endl;
system("pause");
return 0;
}
void swap(int a , int b)
{
    int t=a;
    a=b;
    b=t;

}
你试试啊

Sharp your mind!
2011-06-22 23:07
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
收藏
得分:3 
   这个问题其实就是地址的问题。。。
   lz,其实之前我也有同样的疑惑,但是结果弄懂之后就会觉得非常简单。简单点和你说吧,就是说你这个代码其实只是改变了a,b的值,a,b的值其实是得到了互换,但是x,y的值却没有变。、
   你若要实现x,y的互换的话,只需将swap函数中的a,b改为地址或者引用。即swap(&a,&b).
 
2011-06-22 23:17
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:3 
以下是引用lianjiecuowu在2011-6-22 23:07:44的发言:

调用函数时首先调用自己声明的函数,没有找到才使用默认的函数,第二个里面swap没有在调用之前声明,当然使用系统默认的swap函数了
系统有一个自带的swap函数,不信你把第二个的swap函数注释掉,依然可以运行,而且是正确的交换结果
 
#include
using namespace std;
//void swap(int a,int b);
int main()
{  
int x=5,y=10;
cout<<"x="<
4L正解
2011-06-23 09:18
城东古桥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:101
注 册:2010-9-13
收藏
得分:3 
顶4楼====

来此寻求
2011-06-26 16:43
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
所以很多书都建议不要用
using namespase std;
这种语句。
而是用
using std::cin;
这样的。

优点是这种情况必须用
std::swap
才会调用标准库中的函数。

而实际上,正式的场合,一般都禁止使用 using naspase。
平时练习可以用用,但出了问题要能联想到原因。即使没有听说过标准库里的 swap,也应该能想到:没有在之前声明过的函数怎么会被用呢?
2011-06-26 18:42
快速回复:请教一个关于c++函数值传递的问题
数据加载中...
 
   



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

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