形参和实参是函数中的两个重要概念。

形参(形式参数)是在函数定义中出现的参数,它是一个虚拟参数,只有在函数调用时才会接收到传递进来的实际参数。形参可以被看作是一个占位符,在函数定义时并没有实际的数值,只有在函数调用时才会得到实参的数值。形参的主要作用是表示函数需要从外部传递进来的数据。

实参(实际参数)是在函数中实际出现的参数,它的值可以是常量、变量、表达式、类等。实参的值是确定的,必须在函数调用时提供。实参的主要作用是向函数传递数据,将数据的值传递给形参,在函数体内被使用。

要注意的是,形参和实参之间的传递方式有两种:值传递和地址传递。值传递是指将实参的值复制给形参,形参在函数内部使用时不会改变实参的值。而地址传递是指将实参的地址传递给形参,形参在函数内部使用时可以通过地址修改实参的值。

总结起来,形参是函数定义中的参数,是一个虚拟的占位符,用于接收函数调用时传递进来的实参。实参是函数调用时提供的具体数值,用于向函数传递数据。形参和实参之间的传递方式可以是值传递或地址传递。

#include

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,交换成功。