找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1319|回复: 9

函数声明问题

[复制链接]
发表于 2009-11-5 00:52:27 | 显示全部楼层 |阅读模式 IP:江苏扬州
程序代码:
#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;
}


这两段代码的结果怎么不一样呢
发表于 2009-11-5 00:52:29 | 显示全部楼层 IP:江苏扬州
用dev-c++ 编译的 输出的都是 r:6 t:5
结果一样
回复

使用道具 举报

发表于 2009-11-5 00:52:30 | 显示全部楼层 IP:江苏扬州
难道VC6.0真的那么差劲……
回复

使用道具 举报

发表于 2009-11-5 00:52:32 | 显示全部楼层 IP:江苏扬州
我觉得和编译器关系不大,按引用传递和按值传递时的函数声明位置有点搞不懂,例如下面两个程序。
程序一:按值传递
#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函数内部和外部时编译结果又不一样了。
回复

使用道具 举报

发表于 2009-11-5 00:52:33 | 显示全部楼层 IP:江苏扬州
rustleer 在 2008-11-6 17:47 的发言:

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



如果与编译器没有关系为什么用其他编译器就会得出一样的结果呢!
回复

使用道具 举报

发表于 2009-11-5 00:52:36 | 显示全部楼层 IP:江苏扬州
我用的也是VC6。怎么我这里两个代码的结果是一样的?r=6,t=5
回复

使用道具 举报

发表于 2009-11-5 00:52:38 | 显示全部楼层 IP:江苏扬州
lockhawk 在 2008-11-6 18:47 的发言:

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

难道我的版本很低……
莫非发了补丁?
回复

使用道具 举报

发表于 2009-11-5 00:52:39 | 显示全部楼层 IP:江苏扬州
这两段程序的结果不一样是正常的,第一段程序可以实现交换功能,第二段程序无法实现交换功能,我用的VC++6.0以前也出现过这个问题,主要是由于子函数声明的位置不同造成的,第一个程序由于是在main()外面声明的,因此可以正常的编译,但是第二个是在main中声明的,造成结果的不相同!!    不知道其他版本的怎么样啊?
回复

使用道具 举报

发表于 2009-11-5 00:52:41 | 显示全部楼层 IP:江苏扬州
测试结果和楼主一样,一不小心被我发现是std名字空间里有个swap函数引起的。
回复

使用道具 举报

发表于 2009-11-5 00:52:42 | 显示全部楼层 IP:江苏扬州
楼上正解,你把函数名字改成swapTest就知道了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 09:48 , Processed in 0.185917 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表