简单的代码分析,C++中的引用和指针交换子函数中的值

这里只做备份,后续有时间再完整分析

PS:c语言中没有引用的概念,所以swap_1()这个函数是无法通过编译的。但是在C++中是支持该方法的即所谓的多重含义,即在此处的&并不是取地址而是其中的变量的别名,如果以后用不到C++可以不用了解,因为在c中可以通过指针即swap_2()这个函数来间接改变函数内的值。效果其实差不多。不过在实际中,因为C++是c的超集,理论上可以使用stdio.h这个头文件如果将这个文件的后缀名改成.cpp然后用g++来编译那么swap_1()这个函数是可以通过编译并且运行的。所以有意思的是swap_1()这个函数要想编译只需要将.c文件改成.cpp文件即可运行。

//引用和指针的区别
#include<iostream>

using namespace std;
void swap_1(int &a,int &b);
void swap_2(int *kk,int *dd);
void swap_3(int ds,int dds);
enum tt{
    x0=11,
    x1,
    x2,
    x3,
    x4,
    x5
};
int main()
{
    int m=x0;
    int n=x1;
    int l=x2;
    int pp=x3;
    int m1=x4;
    int m2=x5;
    cout<<"1:m="<<m<<",n="<<n<<",l="<<l<<",p="<<pp<<",m1="<<m1<<",m2="<<m2<<endl;
    swap_1(m,n);
    cout<<"2:m="<<m<<",n="<<n<<",l="<<l<<",p="<<pp<<",m1="<<m1<<",m2="<<m2<<endl;
    swap_2(&l,&pp);
    cout<<"3:m="<<m<<",n="<<n<<",l="<<l<<",p="<<pp<<",m1="<<m1<<",m2="<<m2<<endl;
    swap_3(m1,m2);
    cout<<"4:m="<<m<<",n="<<n<<",l="<<l<<",p="<<pp<<",m1="<<m1<<",m2="<<m2<<endl;
}

void swap_1(int &a,int &b)  //int &a=m;即a是m的别名则x=a;即x=m;即改变了引用的值会影响被引用的值
{
    int x;
    x=a;
    a=b;
    b=x;
}

void swap_2(int *c,int *d) //取地址用指针,将存放变量l和pp的地址取出,将其中的值进行交换,地址是客观存在的将其中的值交换必会使值发生变化
{
    int y;
    y=*c;
    *c=*d;
    *d=y;

}

void swap_3(int e,int f)    //在函数内部进行交换由于没有用引用和取地址,函数虽然在内部将两个参数的值进行了交换但是所创建的运算空间即内存空间是动态的
{                           //它们会在函数运行完成后将所有的值都销毁并且该函数是void类型没有返回值所以在它结束后m1和m2的值没有变化
    int z;
    z=e;
    e=f;
    f=z;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值