要理解值传递、指针传递和引用传递的区别,主要要理解函数的实参和形参,函数的作用域(自动变量、栈),内存的布局以及指针和引用的特点。这里主要总结三种参数传递方式使用的主要场合。
值传递:只给函数提供输入值,需要复制开销,大对象很少使用值传递。
指针传递:可以改变指针指向内容的值,但是不能改变指针本身,无需复制开销。如果需要改变指针本身,可以使用二重指针或者指针引用。
引用传递:除了提供输入值外,还返回操作结果,无需复制开销。
#include
//值传递,函数体内变量n是参数n的一份拷贝,函数体内改变n的值不会改变外面的n
void addTenByVal(int n)
{
n = n + 10;
return;
}
//指针传递,n是指向外部变量的指针,改变*n的值,也会改变外面变量的
void addTenByPtr(int *n)
{
*n = *n + 10;
return;
}
//引用传递,别名引用,牵一发而动全身
void addTenByRef(int &n)
{
n = n + 10;
return;
}
int main(int argc , char *argv[])
{
int n = 10;
printf("值传递前,n=%d\n",n);
//值传递
addTenByVal(n);
printf("值传递后,n=%d\n",n);
printf("指针传递前,n=%d\n",n);
//指针传递
addTenByPtr(&n);
printf("指针传递后,n=%d\n",n);
printf("引用传递前,n=%d\n",n);
//引用传递
addTenByRef(n);
printf("引用传递后,n=%d\n",n);
system("pause");
return 0;
}
后来复习的时候又写了一个DEMO,这个不需要解释,大家都懂的。
#include
#include
#include
#include
#