C++函数的参数传递(三种传参形式)
函数的参数传递共三种:传值、传指针和传引用。其中后两种功能类似。 传值 参数传递到函数后,只是一个局部变量,修改这个变量无法改变实参的值,即这是个单向传递。
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
}
概括: .在函数被调用时才分配形参的存储单元 .实参可以是常量、变量或表达式 .实参类型必须与形参相符 .值传递时传递参数值,即单向传递 .引用传递可以实现双向传递 .常引用作参数可以保障实参数据的安全 .传引用比传值更高效(这个以后有时间讲)
