C++函数声明问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 14:34:22
//程序实现变量值的交换
1 #include<iostream>
2 using namespace std;
3 void swap(int &,int &);
4 int main(){
5
6 int i=1,j=3;
7 swap(i,j);
8 cout<<"i="<<i<<" "<<"j="<<j<<endl;
9 return 0;
}
void swap(int &a,int &b)
{ int temp;
temp=a;
a=b;
b=temp;
}
//运行结果为i=3,j=1实现值的交换
然后我将第3行的函数声明移到第五行,i=1,j=3数值没变,为什么?
我是用Visual C++ 6.0编译的
再说明一点,我是按照谭浩强的《c++程序设计》打的代码,书上的代码声明是放在第5行的

vs2008下面测试,不管放在哪都一样

...你这个函数在3和5位置效果都是一样的撒虽然作用域不同但是对于你这个程序来说都没有什么影响

你这里的形式参数属于引用类型,swap这个函数你在后面定义了,但是在前面的程序中,若要访问后面的形参,就要在该文件开始时给出一条该函数的原型语句,一般都这么写的,但是我还真没试过放到主函数里面去声明,如果放到主函数里面声明还能和原来一样起作用的话才是不正常吧。我觉得可能是这个函数声明放在主函数里,它的声明没起到作用,大概因为花括号的限制,导致它没法对应后面的在另一个花括号的形参。这应该涉及到有关作用域方面的东西,我的想法是这样的。

参见回答http://zhidao.baidu.com/question/70069319.html

int main()
{
int a=3,b=5;
void swap(int &i, int &j);//A
...
swap(a,b);//调用的是A处的swap

}
你这样写:
int main()
{
int a=3,b=5;
void swap(int &i, int &j)//A
{//B
};
...
swap(a,b);//调用的是A处的swap
}
然后在B处打个断点(F9),便会发现是调用A处的swap,因为这个swap函数内部什么都没做,所以还是3,5