| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1166 人关注过本帖
标题:函数声明问题
只看楼主 加入收藏
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
结帖率:100%
收藏
 问题点数:0 回复次数:9 
函数声明问题
程序代码:
#include<iostream>
using namespace std;

void swap(int &a,int &b);

main()
{
    
    int r = 5, t = 6;
    swap(r,t);
    cout<<"r:"<<r<<" t:"<<t<<endl;
}
void swap(int &a,int &b)
{
    int temp = a;
    a = b;
    b = temp;
}




程序代码:
#include<iostream>
using namespace std;

main()
{
    void swap(int &a,int &b);
    int r = 5, t = 6;
    swap(r,t);
    cout<<"r:"<<r<<" t:"<<t<<endl;
}
void swap(int &a,int &b)
{
    int temp = a;
    a = b;
    b = temp;
}


这两段代码的结果怎么不一样呢
搜索更多相关主题的帖子: 函数 声明 
2008-11-06 13:19
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
用dev-c++ 编译的 输出的都是 r:6 t:5
结果一样
2008-11-06 13:50
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
收藏
得分:0 
难道VC6.0真的那么差劲……
2008-11-06 17:11
rustleer
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-4
收藏
得分:0 
我觉得和编译器关系不大,按引用传递和按值传递时的函数声明位置有点搞不懂,例如下面两个程序。
程序一:按值传递
#include <iostream>
using namespace std;   
void swap(int x, int y);
int main()
{
   int x = 5, y = 10;
   cout << "Main. Before swap, x: " << x << " y: " << y << endl;
   swap(x,y);
   cout << "Main. After swap, x: " << x << " y: " << y << endl;
   return 0;
}
 void swap (int x, int y)
{
   int temp;
     cout << "Swap. Before swap, x: " << x << " y: " << y << endl;
     temp = x;
     x = y;
     y = temp;
     cout << "Swap. After swap, x: " << x << " y: " << y << endl;
}
这个程序中将swap函数的声明放在main函数内部和外部时的编译结果是相同的。

程序二:按引用传递。
#include <iostream>
using namespace std;
void swap(int &x, int &y);
int main()
{
    int x = 5, y = 10;
     cout << "Main. Before swap, x: " << x << " y: "
       << y << endl;
      swap(x,y);
      cout << "Main. After swap, x: " << x << " y: "
       << y << endl;
     return 0;
}
  void swap (int &rx, int &ry)
{
    int temp;
      cout << "Swap. Before swap, rx: " << rx << " ry: "
       << ry << endl;
     temp = rx;
    rx = ry;
    ry = temp;
    cout << "Swap. After swap, rx: " << rx << " ry: "
       << ry << endl;
  }
在此程序中,swap函数的声明在main函数内部和外部时编译结果又不一样了。

[[it] 本帖最后由 rustleer 于 2008-11-6 17:49 编辑 [/it]]
2008-11-06 17:47
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
收藏
得分:0 
[bo][un]rustleer[/un] 在 2008-11-6 17:47 的发言:[/bo]

我觉得和编译器关系不大,按引用传递和按值传递时的函数声明位置有点搞不懂,例如下面两个程序。
程序一:按值传递
#include
using namespace std;   
void swap(int x, int y);
int main()
{
   int x = 5, ...



如果与编译器没有关系为什么用其他编译器就会得出一样的结果呢!
2008-11-06 17:58
lockhawk
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2008-9-17
收藏
得分:0 
我用的也是VC6。怎么我这里两个代码的结果是一样的?r=6,t=5

人生最大痛苦:虽然不明白你们说什么,但还是要听!
2008-11-06 18:47
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
收藏
得分:0 
[bo][un]lockhawk[/un] 在 2008-11-6 18:47 的发言:[/bo]

我用的也是VC6。怎么我这里两个代码的结果是一样的?r=6,t=5

难道我的版本很低……
莫非发了补丁?
2008-11-06 18:52
hitcolder
Rank: 1
等 级:新手上路
威 望:1
帖 子:124
专家分:0
注 册:2008-10-28
收藏
得分:0 
这两段程序的结果不一样是正常的,第一段程序可以实现交换功能,第二段程序无法实现交换功能,我用的VC++6.0以前也出现过这个问题,主要是由于子函数声明的位置不同造成的,第一个程序由于是在main()外面声明的,因此可以正常的编译,但是第二个是在main中声明的,造成结果的不相同!!    不知道其他版本的怎么样啊?
2008-11-06 19:16
youhm
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2006-5-25
收藏
得分:0 
测试结果和楼主一样,一不小心被我发现是std名字空间里有个swap函数引起的。
2008-11-06 20:54
beyondlwm
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2006-7-19
收藏
得分:0 
楼上正解,你把函数名字改成swapTest就知道了。
2008-11-07 11:55
快速回复:函数声明问题
数据加载中...
 
   



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

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