函数的参数传递共三种:传值、传指针和传引用。其中后两种功能类似。
传值
参数传递到函数后,只是一个局部变量,修改这个变量无法改变实参的值,即这是个单向传递。
void add(int x)
{
x++;
}
int main()
{
int b=1;
add(b);//函数完成后b的值不变
}
传指针
理论上讲,传进函数里的同样也是一个值,但这个值实质上是一个地址,因此修改这个指针无法影响外部的指针,即形成与实参是两个相互独立的指针。
但是,在形参所指的地址改变前,通过指针里面保存的地址来修改指针保存的地址里面的值。
void test(int* x)
{
*x += 5;
}
int main()
{
int a = 0;
int* b = &a;
test(b);
cout << *b << " " << a;//结果是5 5
}
传引用
引用的传递即传递参数的地址,修改这个地址里面的内容自然会修改到外面的参数。
void add1(int& x)
{
x += 5;
}
int main()
{
int a = 1;
int* b = &a;
add1(a);
cout << *b << " " << a;//结果是6 6
}
概括:
.在函数被调用时才分配形参的存储单元
.实参可以是常量、变量或表达式
.实参类型必须与形参相符
.值传递时传递参数值,即单向传递
.引用传递可以实现双向传递
.常引用作参数可以保障实参数据的安全
.传引用比传值更高效(这个以后有时间讲)