木子屋 Dnawo's BLOG

C++按值/按址传递

👤 dnawo 📅 2010-11-16 👁 4537 👍 0 💬 0 🔄 本站原创
1.按值传递:

#include <iostream>
using namespace std;

void swap(int x, int y)
{
	int z=x;
	x=y;
	y=z;
}

int main()
{
    int a,b;
	a=3;
	b=4;
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;
	swap(a,b);
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;

    return 0;
}

2.按址传递:

#include <iostream>
using namespace std;

void swap(int *x, int *y)
{
	int z=*x;
	*x=*y;
	*y=z;
}

int main()
{
    int a,b;
	a=3;
	b=4;
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;
	swap(&a,&b);
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;

    return 0;
}

因为C++中有了指针的概念,所以在讲述按值/按址传递函数参数比其他语言(VB使用ByRef关键字、C#使用ref关键字)好理解多了,按值传递的是副本,按址传的是内存地址。但是,使用指针,swap函数中有的变量有星号,有的变量没星号,很容易就弄混输错了,我们可以改用别名传递来实现同样的效果:

#include <iostream>
using namespace std;

void swap(int &x, int &y)
{
	int z=x;
	x=y;
	y=z;
}

int main()
{
    int a,b;
	a=3;
	b=4;
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;
	swap(a,b);
	cout<<"a:"<<a<<'\t'<<"b:"<<b<<endl;

    return 0;
}

swap函数的形参是实参的别名,别名等同于原本的变量,不再是副本,因而也能实现按址传递的效果,并且代码也变简单多了。

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 C++保存在栈和堆上的对象 下一篇 → WinRAR打不开ISO文件解决方法