函数的参数传递形式
- 传递值,传递时形参将会生成新的变量初始化为实参的值,形参的改变不会影响实参
- 传递引用,相当于形参是实参的别名,形参的改变会导致实参的改变
- 传递指针,传递时形参将会生成新的指针变量初始化为实参的值,形参指向的地址改变不会影响实参,但是在不改变指向的时候形参指向的值改变会导致实参指向值的改变
函数的值传递
void swap1(int a, int b)
{
int c = a;
a = b;
b = c;
}
函数的引用传递
void swap2(int& a, int& b)
{
int c = a;
a = b;
b = c;
}
函数的指针传递
void swap3(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
void f7(int* a)
{
int c = 10;
a = &c;
}
测试
void test()
{
int a = 3, b = 5;
cout << "调用值传递函数前" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
swap1(a, b);
cout << "调用值传递函数后" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
cout << endl << endl;
a = 10;
b = 20;
cout << "调用引用传递函数前" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
swap2(a, b);
cout << "调用引用传递函数后" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
cout << endl << endl;
a = 6;
b = 8;
int* pa = &a;
int* pb = &b;
cout << "调用指针传递函数前" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
swap3(pa, pb);
cout << "调用指针传递函数后" << endl;
cout << "a = " << a << " " << "b = " << b << endl;
cout << endl << endl;
a = 9;
cout << "未改变指向时a的值" << *pa << endl;
f7(pa);
cout << "改变指向后a的值" << *pa << endl;
}
结果如下
验证了值传递不改变实参的大小,指针传递和引用传递可以改变值的大小,同时指针传递改变指针的指向不会引起实参的指向