欢迎光临

木子屋

标题: C++按值/按址传递

作者: dnawo

日期: 2010-11-16 10:26 AM

分类: Win编程

内容: 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)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.738 ms

返回

标题: C++按值/按址传递

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.738 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.770 ms

返回