从函数参数传递说起:
- 按值传递
int addition(int x, int y){
return(x + y)
}
int main(){
int x = 5, y = 2, z;
z = addition(x, y);
return 0;
}
- 按地址传递
void duplicate (int& a, int& b){
a*=2;
b*=2;
}
int main (){
int x=1, y=3;
duplicate (x, y);
cout << "x=" << x << ", y=" << y ;
return 0;
}
按值传递,顾名思义,函数形参仅仅得到变量传来的值,函数的任何操作并不对变量产生任何变化;按地址传递,他的定义方式与按值传递不一样(注意其在main函数中用法),形式参数带有一个地址符号,这种传递方式,将变量本身传递进函数,所以函数能对参数进行直接操作。
以上是由指针联想到的,下面说说指针,请看下面的例子
//省略头文件即命名空间等
void test(int *p)
{
int b=2;
p=&b;
cout<<p<<endl;
}
int main(void)
{
int a=10;
int *p=&a;
cout<<p<<endl;
test(p);
cout<<p<<endl;
return 0;
}
其结果:
第一行输出和第三行输出的结果相同:0038f928,第二行输出:0038f834。从这里可以看出,当指针作为参数进行传递时传递的也只是一个值,只不过该值只一个地址,因此对于形参的改变并不影响实参。
函数参数传递,核心是看清楚传递的是地址还是值