c++中三种传值方式
2017-07-08 00:00
127 查看
传值传参
这种方法相当于将原来的变量拷贝了一份,然后传递过去。#include <iostream> using namespace std; //传值传参 int Fun1(int a) { a = a + 1; return a; } int main() { int a = 1; cout<<Fun1(a)<<endl; cout<<a<<endl; return 0; }
结果:
由此可见,原来a的值并没有改变,说明传递的并不是原来的值,仅仅是它的拷贝。
地址传参
地址传参传递的是存放这个变量内存的地址。int Fun1(int* a) { *a = *a + 1; return *a; } int main() { int a = 1; cout<<Fun1(&a)<<endl; cout<<a<<endl; return 0; }
运行结果如下:
可见,地址传参能够改变原参数的值。
引用传参
简单来说,引用传参就是给变量起了一个别名。比如,你本名叫“小花”,你妈妈会叫你“花花”,他代表的都是你。int Fun1(int& a) { a = a + 1; return a; } int main() { int a = 1; cout<<Fun1(a)<<endl; cout<<a<<endl; return 0; }
另外,新手常犯的错误就是,用传值传参去交换两个变量的值,这当然交换不成功!因为你仅仅交换了他们的拷贝,并没有交换两个值得本身(如果想不创建临时变量就交换 两个变量的值,请参考我的另外一篇博客http://blog.csdn.net/bitlxlx/article/details/74147773)。
错误的交换:
void mySwap(int a, int b) { int c = a; a = b; b = c; } int main() { int a = 1; int b = 10; cout<<"交换前a="<<a<<" "<<"交换前b="<<b<<endl; mySwap(a, b); cout<<"交换后a="<<a<<" "<<"交换后b="<<b<<endl; return 0; }
正确的交换:
void mySwap(int *a, int *b) { int c = *a; *a = *b; *b = c; } int main() { int a = 1; int b = 10; cout<<"交换前a="<<a<<" "<<"交换前b="<<b<<endl; mySwap(&a, &b); cout<<"交换后a="<<a<<" "<<"交换后b="<<b<<endl; return 0; }
void mySwap(int &a, int &b) { int c = a; a = b; b = c; } int main() { int a = 1; int b = 10; cout<<"交换前a="<<a<<" "<<"交换前b="<<b<<endl; mySwap(a, b); cout<<"交换后a="<<a<<" "<<"交换后b="<<b<<endl; return 0; }
相关文章推荐
- c++三种编码方式
- C++的三种继承方式
- C++中类的三种继承方式
- C++ 三种继承方式和构造函数执行的顺序
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- 了解三种C++存储方式
- C++中运算符New的三种使用方式
- 理顺一下C++三种内存分配方式
- 鲜为人知的C++中关键字new的三种使用方式 (整理在此 方便学习)
- C++、WIN API、MFC分别遍历文件夹、获取文件名称的三种方式【耿然原创】
- (转)C++异常对象三种方式传递的综合比较
- C++ 派生类的三种继承方式
- C/C++中算法运行时间的三种计算方式
- 理顺一下C++三种内存分配方式
- C++中函数调用时的三种参数传递方式
- C++中定义类的三种方式
- C++中关于拷贝构造函数的调用方式有以下三种!
- 了解三种C++存储方式
- c++三种函数传参方式
- C++ 三种继承方式