形参和实参是函数中的两个重要概念。
形参(形式参数)是在函数定义中出现的参数,它是一个虚拟参数,只有在函数调用时才会接收到传递进来的实际参数。形参可以被看作是一个占位符,在函数定义时并没有实际的数值,只有在函数调用时才会得到实参的数值。形参的主要作用是表示函数需要从外部传递进来的数据。
实参(实际参数)是在函数中实际出现的参数,它的值可以是常量、变量、表达式、类等。实参的值是确定的,必须在函数调用时提供。实参的主要作用是向函数传递数据,将数据的值传递给形参,在函数体内被使用。
要注意的是,形参和实参之间的传递方式有两种:值传递和地址传递。值传递是指将实参的值复制给形参,形参在函数内部使用时不会改变实参的值。而地址传递是指将实参的地址传递给形参,形参在函数内部使用时可以通过地址修改实参的值。
总结起来,形参是函数定义中的参数,是一个虚拟的占位符,用于接收函数调用时传递进来的实参。实参是函数调用时提供的具体数值,用于向函数传递数据。形参和实参之间的传递方式可以是值传递或地址传递。
#include<iostream>
void exchange1(int x,int y);
void exchange2(int &x,int &y);
void exchange3(int *x,int *y);
using namespace std;
int main()
{
int a = 7777777,b = 666666;
exchange1(a,b);
cout << a << endl << b << endl;
exchange2(a,b);
cout << a << endl << b << endl;
exchange3(&a,&b);
cout << a << endl << b << endl;
}
void exchange1(int x,int y)
{
int temp;
temp = y;
y = x;
x = temp;
}
void exchange2(int &x,int &y)
{
int temp;
temp = y;
y = x;
x = temp;
}
void exchange3(int *x,int *y)
{
int temp;
temp = *y;
*y = *x;
*x = temp;
}
exchange1中a和b没有交换的原因是:x和y是函数定义中的形参,代码中吧实参a,b分别赋值给了x,y这两个形参变量。代码中只是替换掉了x和y的值,实参a和b不受影响,交换失败。
exchange2中,x和y是a和b的引用,操作x和y交换就等于a和b交换,交换成功。
exchange3中,x和y两个形参是a和b的指针,也就是存放实参的地址。然后函数里面交换了x和y指向的数据地址,也就是实参a和b,交换成功。