函数的参数传递(基础知识回顾)

      定义函数时更的参数叫形参。如Swap(int a,int b),这里的a和b就是形参。调用函数时传递的参数就是实参,如Swap(m,n),这里的m,n就是实参。实参可以是常量,变量,表达式,但是类型必须与形参一致。在函数未被调用时,形参不占用内存空间,只有在调用时才会分配内存空间。函数参数传递的方式有两种:值调用与引用调用。

1.值调用

     值调用就是调用函数时,给形参分配内存空间,将实参拷贝给形参,之后的函数执行中形参和实参就脱离了关系,谁都不影响谁。也就是值调用时,只是用实参的值初始化下形参,之后两者互不影响。

  int _tmain(int argc, _TCHAR* argv[])
        {
                   int x=5, y=10;
                   cout<<"x="<<x<<"    y="<<y<<endl;
                   Swap(x,y);
                   cout<<"x="<<x<<"    y="<<y<<endl;
                   return 0;
        }
        void Swap(int a, int b)
        {
                   int t;
                   t=a;
                   a=b;
                   b=t;
        }

运行结果是: x=5,y=10

                       x=5,y=10

  x和y分别传值给a和b后,a跟b的值在Swap内怎样变化都影响不到x和y,所以两次输出x和y的值没有变化。

2.引用调用

      引用是一种特殊类型的变量,我们可以认为它是另一个变量的别名,利用引用名和原来的变量名访问变量的效果是一样的。引用的形式是:类型标识符 &引用名。比如:

       int  i, j;
       int &ri=i;    // 建立一个int型的引用ri,并将其初始化为变量i的一个别名
       j=10;
       ri=j;          // 相当于 i=j;

    声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象;一旦一个引用被初始化后,就不能改为指向其它对象。简单说就是引用定义的时候就指定它指向的变量,之后就不能变了。

      引用可以作为形参,比如void swap(int& a, int& b) {...}。这个时候引用就不需要对其初始化了,因为形参只是类型说明,主调函数调用这个函数时才会为形参分配内存,也才会用实参来初始化形参。用引用调用后,形参就是实参的别名而已,对形参做的任何改变都会影响实参发生同样的改变。引用调用说明下:

  #include<iostream>
       using namespace std;
       void Swap(int& a, int& b);
       int _tmain(int argc, _TCHAR* argv[])
       { 
                 int x=5, y=10;
                 cout<<"x="<<x<<"    y="<<y<<endl;
                 Swap(x,y);
                 cout<<"x="<<x<<"    y="<<y<<endl;
                 return 0;
       }
       void Swap(int& a, int& b)
       { 
                 int t;
                 t=a;
                 a=b;
                 b=t;
       }   

       运行结果就跟我们想的一样了:
       x=5      y=10
       x=10      y=5

      引用调用后x和y的值成功的交换了。值调用和引用调用的区别只是函数的形参写法不同,主调函数调用被调函数时的调用语句是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值