C++中的引用参数和值传递

C++中的引用参数
  值调用

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

例子

#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=5      y=10

引用调用
  如果我们想让被调函数中对形参做的修改同样对主调函数中的实参有效,用值调用不行,那怎么办呢?答案是用引用调用

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

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

自己编写的用来学习实参与形参的例子

#include "stdafx.h"
#include "iostream"
using namespace std;
void Swap(int a,int b);
int _tmain(int argc, _TCHAR* argv[])
{

int x = 5;
int y = 10;
cout <<"x= "<<x<<" x's address"<<&x<<endl;
cout<<"y= "<<y<<" y's address"<<&y<<endl;
Swap(x,y);

cout <<"交换完成后\n"<<"x= "<<x<<" x's address"<<&x<<endl;
cout<<"y= "<<y<<" y's address"<<&y<<endl;
return 0;
}

void Swap(int a,int b)
{
int t;
t = a;
a = b;
b = t;
cout <<"exchanging\n"<<"a= "<<a<<" a's address"<<&a<<endl;
cout<<"b= "<<b<<" b's address"<<&b<<endl;

在这里插入图片描述

可以看到在交换中产生了新的内存空间,因此形参和实参相互独立了,因此没有达到程序想要的结果。

引用:

#include "stdafx.h"
#include "iostream"
using namespace std;
void Swap(int& a,int& b);
int _tmain(int argc, _TCHAR* argv[])
{

int x = 5;
int y = 10;
cout <<"x= "<<x<<" x's address"<<&x<<endl;
cout<<"y= "<<y<<" y's address"<<&y<<endl;
Swap(x,y);

cout <<"交换完成后\n"<<"x= "<<x<<" x's address"<<&x<<endl;
cout<<"y= "<<y<<" y's address"<<&y<<endl;
return 0;
}

void Swap(int& a,int& b)// 可以理解为 int& a = x; int& b = y 因此仅仅是别名,不分配新的内存
{
int t;
t = a;
a = b;
b = t;
cout <<"exchanging\n"<<"a= "<<a<<" a's address"<<&a<<endl;
cout<<"b= "<<b<<" b's address"<<&b<<endl;

}

在这里插入图片描述

可以看到,交换成功了

注:有些转自:http://www.jizhuomi.com/software/43.html

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值