#include
using namespace std;
void swap (int &x,int &y);
int main()
{
int a=2,b=3;
swap (a,b);
cout < cout < return 0;}
void swap (int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
为什么上面的可以交换,下面的就不可以了呢?
#include
using namespace std;
void swap (int x,int y);
int main()
{
int a=2,b=3;
swap (a,b);
cout < cout < return 0;}
void swap (int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
在C/C++调用函数时, 如果函数有参数, 这时C/C++使用的是传值的方式, 而不是VB里的传址的方式.比如函数:
void swap(int a, int b) {int temp=b; b=a; a=temp;}
该函数看起来是用来交换a和b的值的, 但是如果有代码:
void main() {int a=2, b=3; swap(a,b);}执行完该函数以后a仍然是2, b仍然是3, 也就是说a和b的值并没有交换. 为什么哪? 这就是"传值"的方式. 也就是说调用该函数时, swap所操作的a和b并不是main函数里的a和b, 而是另外在堆栈上申请了一块内存, 只是把main函数里的a和b复制过来了. 因此在swap函数里无论对a和b做什么操作都不会影响到main里的a和b的.
如果是在VB里, 那么swap函数内部的a和b和main函数里的a和b是同一块内存, 执行完swap(a,b)后,a=3,b=2;
如果想要达到swap(a,b)后a=3,b=2在C语言里只有使用指针来现. 但指针不易操作, 且容易出错. 因此C++里定义了引用类型, 如果变量声明为引用, 那么函数便为"传址", 也就达到了swap交换的目的.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8780503/viewspace-1034210/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8780503/viewspace-1034210/