实参与形参的区别

来源:互联网 发布:stc单片机pwm输出频率 编辑:程序博客网 时间:2024/05/02 02:23

形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数.

实参:全称为"实际参数"是在调用时传递个该函数的参数.

 

--------------------------------------------------------------------------------

void Exchg1(int x, int y)

{

  inttmp;

 tmp=x;

 x=y;

 y=tmp;

 printf("Exchg1:x=%d,y=%d\n",x,y);

}

void Exchg2(int &x, int &y)

{

  inttmp;

 tmp=x;

 x=y;

 y=tmp;

 printf("Exchg2:x=%d,y=%d\n",x,y);

}

void Exchg3(int *x, int *y)

{

  inttmp;

 tmp=*x;

 *x=*y;

 *y=tmp;

 printf("Exchg3:x=%d,y=%d\n",*x,*y);

}

 

void main()

{

  inta=4,b=6;

 Exchg1 (a,b) ;

 printf("a=%d,b=%d\n",a,b);

 Exchg2 (a,b);

 printf("a=%d,b=%d\n",a,b);

 Exchg3(&a,&b) ;

 printf("a=%d,b=%d\n",a,b);

}

 这里Exchg1函数被调用的时候,并没有成功交换a跟b的数据。为何呢。

int a=4,b=6;

 Exchg1 (a,b) ;   //这里本质上发生的是:Exchg1(intx=a,int y=b) ;   x跟y是函数定义里面的形参,也就是说这里只是把实参a跟b的值赋予了x,y这2个形参变量。接下来,函数里发生的值互换只换掉了x跟y的值,而实参a跟b没有影响。

再看Exchg2 (a,b);   //再看本质Exchg2(int &x=a,int &y=b);   这里x跟y都是a,b的引用,操作x跟y交换就等于a跟b交换,自然,调用Exchg2可以成功交换a跟b

Exchg3(&a,&b) ;   //Exchg3(int *x=&a,int *y=&b);   x跟y2个形参是a跟b的指针,也就是实参数据存放的地址。然后函数里交换了x跟y指向的数据,也就是实参a跟b,所以,交换也是成功的。

 

代码运行的结果,exchg1没有交换a,b值;exchg2交换了a,b值,到了exchg,a,b的值似乎没有交换,仍旧是a为4,b为6,刚开始以为代码有问题,后来设置了断点之后,发现代码运行到exchg3(&a,&b)时,a=6,b=4了,所以代码运行结果和初始值一样的话,说明已经交换了a,b的值,至此说明代码是没有任何问题的。

0 0
原创粉丝点击