C++函数参数的传递
参数时调用函数与被调用函数之间交换数据的通道。函数定义首部的参数称为形式参数(简称形参),调用函数时使用的参数称为实际参数。
实际参数必须与形式参数在类型,个数,位置上相对应。函数被调用前,形参没有存储空间。函数被调用时,系统建立与实参对应的形参存储空间,函数通过形参与实参进行通信,完成操作。函数执行完毕,系统收回形参的临时存储空间。这个过程称为参数传递或参数的虚实结合。
C++有值传递(值调用),指针传递(指针调用)和引用传递(引用调用)等3种参数传递机制。
运行实例代码加深了解
#include<iostream>
using namespace std;
void swapPoint(int*a, int*b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "swapPoint(int*a, int*b) a:" << a << " b:" << b << endl;
}
void swapQuote(int&a, int&b)
{
int temp = a;
a = b;
b = temp;
cout << "swapQuote(int&a, int&b) a:" << a << " b:" << b << endl;
}
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "swap(int a, int b) a:" << a << " b:" << b << endl;
}
int main()
{
int x = 3;
int y = 7;
cout << "原本的x:" << x << " " << "原本的y:" << y << endl;
swapPoint(&x, &y);
cout << "swapPoint(int*a, int*b)指针传参:x:" << x << " " << "y:" << y << " x的地址: "<<&x<<" y的地址: "<<&y<<endl<<endl;
swapQuote(x, y);
cout << "swapQuote(int&a, int&b)引用传参:x:" << x << " " << "y:" <<y << " x的地址: " << &x << " y的地址: " << &y <<endl<< endl;
swap(x, y);
cout << "swap(int a, int b)一般传参:x:" << x << " " << "y:"<<y << " x的地址: " << &x << " y的地址: " << &y <<endl<< endl;
}
当形参为指针类型时,被调用函数可以在函数体内通过形参指针来间接访问实参地址所指的对象。
当形参为引用类型时,形参名作为引用绑定于实际参数识别的对象上,执行函数时,对形参的操作就是对实参对象的操作。执行结束后,撤销引用绑定。
简单理解(当然可能不科学):就是比如你在村里找去小明家【对象】拿3个鸡蛋【实际数值】,你知道他家地址【对象的地址】可以可以去拿,知道他的名字【对象名】也可以去到(不重名的情况),但是你只知道3个鸡蛋【实际数值】就没办法拿了。