注册 登录
编程论坛 C++教室

函数声明问题

freish 发布于 2008-11-06 13:19, 1168 次点击
程序代码:
#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;
}


这两段代码的结果怎么不一样呢
9 回复
#2
newyj2008-11-06 13:50
用dev-c++ 编译的 输出的都是 r:6 t:5
结果一样
#3
freish2008-11-06 17:11
难道VC6.0真的那么差劲……
#4
rustleer2008-11-06 17:47
我觉得和编译器关系不大,按引用传递和按值传递时的函数声明位置有点搞不懂,例如下面两个程序。
程序一:按值传递
#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]]
#5
freish2008-11-06 17:58
[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, ...



如果与编译器没有关系为什么用其他编译器就会得出一样的结果呢!
#6
lockhawk2008-11-06 18:47
我用的也是VC6。怎么我这里两个代码的结果是一样的?r=6,t=5
#7
freish2008-11-06 18:52
[bo][un]lockhawk[/un] 在 2008-11-6 18:47 的发言:[/bo]

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

难道我的版本很低……
莫非发了补丁?
#8
hitcolder2008-11-06 19:16
这两段程序的结果不一样是正常的,第一段程序可以实现交换功能,第二段程序无法实现交换功能,我用的VC++6.0以前也出现过这个问题,主要是由于子函数声明的位置不同造成的,第一个程序由于是在main()外面声明的,因此可以正常的编译,但是第二个是在main中声明的,造成结果的不相同!!    不知道其他版本的怎么样啊?
#9
youhm2008-11-06 20:54
测试结果和楼主一样,一不小心被我发现是std名字空间里有个swap函数引起的。
#10
beyondlwm2008-11-07 11:55
楼上正解,你把函数名字改成swapTest就知道了。
1