- 明确函数传参的两种方式
值传递(pass-by-value)和引用传递(pass-by-reference)
- 明确C和C++的传值方式
C语言只有值传递(pass-by-value),而C++实现了值传递(pass-by-value)和引用传递(pass-by-reference)
- C与C++的实现demo
C的实现
#include <stdio.h> #include <stdlib.h> void Swap(int *a,int *b); int main(int argc,char *argv[]) { int a=1,b=2; int *p1=&a,*p2=&b; printf("Before Swap! p1=[%x],p2=[%x]\n",p1,p2); Swap(p1,p2); printf("After Swap! p1=[%x],p2=[%x]\n",p1,p2); getch(); return 0; } void Swap(int *a,int *b) { int tmp;tmp=*a;*a=*b;*b=tmp; return; }
描述:运行之后,会发现,在调用Swap(p1,p2)前后,参数p1,p2的值并未发生变动。
C++实现
#include <stdio.h> #include <stdlib.h> void Swap(int& a, int& b); int main(int argc,char *argv[]) { int a=1,b=2; printf("Before Swap! a=[%x],b=[%x]\n",&a,&b); Swap(a,b); printf("After Swap! a=[%x],b=[%x]\n",&a,&b); getchar(); return 0; } void Swap(int& a, int& b) { int tmp;tmp=a;a=b;b=tmp; return; }
描述:这个函数中,Swap里面实现的是对两个整型变量地址的操作。这样,肯定就是引用传递了。此时在Swap里面更改a、b的值,也会体现在main函数里面。
总结:说了这么多,其实也是很简单的东西。那么为了证明什么呢?
1.在值传递的时候,被调用函数是不会改变自身的参数的。
2.在引用传递的时候,被调用函数很有可能改变传入的参数,同时将情况反映到主函数中。若想不被改变,则需要在参数前面加上const,控制一下。