C++函数调用方式

来源:互联网 发布:future java 编辑:程序博客网 时间:2024/05/18 00:50

</pre>                                             <span style="font-size:14px">直接调用(传值调用)</span><p></p><p><strong><span style="font-size:18px">函数调用方式</span></strong>:>                                                            使用别名的引用调用</p><p>                               <span style="font-size:14px">         间接调用(引用调用)></span></p><p>                                                                                                      使用指针的引用调用</p><p></p><ul><li><span style="font-size:24px"><strong>直接调用</strong></span></li></ul><p></p><p>当参数按值传递时,被调用函数创建一个新的与参数同类型的变量,并把参数值复制给它,即将实参的值传给形参变量。当被调用函数不需要修改调用程序中的原先变量时,按值传递是有用的。以下程序说明如何按值调用函数。</p><p></p><pre name="code" class="cpp">#include <iostream>using namespace std;int main(){       //函数的传值调用void Swap(int num1, int num2);int num1,num2;cout<<"输入第一个参数:\t";cin>>num1;cout<<"输入第二个参数:\t";cin>>num2;cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"num1="<<num1<<"\tnum2="<<num2<<endl;Swap(num1,num2);cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"num1="<<num1<<"\tnum2="<<num2<<endl;system("pause");return 0;}void Swap(int num1,int num2){int temp;temp = num1;num1 = num2;num2 = temp;cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"num1="<<num1<<"\tnum2="<<num2<<endl;}

运行结果:

说明:在main函数中,从键盘接受两个数10和20赋值给变量num1和num2,以这两个变量为实参调用函数Swap函数。当调用Swap()函数时在内存中产生两个新的内存单元,即Swap()函数形参变量num1和num2,将实参变量num1和num2的值10和20分别赋给Swap()函数形参变量num1和num2,在Swap()函数中交换了形参变量num1和num2的值,即num2=10,num1=20.当Swap()函数执行结束时,形参变量num1和num2的生命周期结束,将内存返给系统,以备他用。而main()函数中的两个变量num1和num2的值一直没有发生变化。

因此,调用函数中程序的变量值在作为值传递时是不受影响的。

  • 使用别名的引用调用

可以用别名运算符(&)给一个变量两个名字。比如说,一个女人名字叫name,而她的父亲叫她daughter,她的丈夫叫她wife,daughter,wife称为名name的别名,名字和别名实际上是指同一个实体。

必须在命名别名的同时初始化(不然就出错)。例:

int number = 10;//声明变量number并初始化int &num  = number;//声明变量number的别名

这里,称num是number的别名,或称num是number的别名引用。


使用别名作为函数的参数,调用此函数称为“”使用别名的引用调用“”。例如定义函数:

void Swap(int &num1, int &num2){       .....}
此函数的声明必须在参数的数据类型之后有一个&符号。例如声明函数:

void Swap(int &, int &);
在函数调用时不使用&符号。(参见线面的程序)

注:使用别名的引用调用在调用函数时,实际上是为实参指定一个别名(函数的形参),在内存中什么也没做。在被调函数内,对形参(别名)的任何操作直接反应到实参,因为它们所指向的是同一个内存单元。
以下程序使用别名引用调用:

#include <iostream>using namespace std;int main(){      //使用别名的引用调用       void Swap(int&, int&);   <span style="color:#33ff33;">//声明此函数时必须在参数数据类型之后加&</span>int number1,num2;cout<<"输入第一个参数:\t";cin>>number1;cout<<"输入第二个参数:\t";cin>>num2;cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"number1="<<number1<<"\tnum2="<<num2<<endl;Swap(number1,num2);      <span style="color:#33ff33;">//调用时不可使用&</span>cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"number1="<<number1<<"\tnum2="<<num2<<endl;system("pause");return 0;}void Swap(int &num1,int &num2){int temp;temp = num1;num1 = num2;num2 = temp;cout<<"/n在main函数内,在swap调用之前:"<<endl;cout<<"num1="<<num1<<"\tnum2="<<num2<<endl;}

  • 用指针的引用调用

一个变量或一个内存单元,即=既有内存标识符(变量名),也有内存地址,可用地址运算符(&)给出一个变量的地址,将变量的地址赋给一个指针,这样不仅可以使用变量名访问内存(直接访问),也可以使用间接访问符(*)访问内存(间接访问)。变量名和变量的地址指向同一个内存。

必须形同类型的变量赋给相同类型的指针。例:

int number = 10;//声明变量numberint *P = &unmber;//声明指针变量P并将变量number的地址赋给指针变量P
这里,称P是number的指针,或称*P是number的指针引用。
使用指针作为函数的参数,调用此函数称为“使用指针的引用调用”。例:

void Swap(int *P1, int *P2){         ...}
此函数的声明必须在参数数据类型之后加一个(*)符号,例:

void Swap(int *, int *)
在函数调用时,在变量前必须使用&符号;

int number1 = 10;int  number2 = 20;Swap(&number1, &number2);...
使用指针的引用调用,在调用函数时实际上是将实参变量的地址赋给被调函数形参的指针,在内存什么也没做。在被调函数内,对形参(指针)的任何操作,直接反应到实参,因为它们指向的是同一个内存单元。(和别名引用调用有点像)
程序参考别名调用

参《C++语言编程基础教程》-宋振会著



0 0
原创粉丝点击