zoukankan      html  css  js  c++  java
  • C++基础——普通引用

    变量名回顾:

     变量名实质上是一段连续存储空间的别名,是一个标号(门牌号)

     程序中通过变量来申请并命名内存空间

     通过变量的名字可以使用内存空间

    问题1:对一段连续的内存空间只能取一个别名吗?

    1. 引用的概念

    a)  在C++中新增加了引用的概念

    b)  引用可以看作一个已定义变量的别名

    c)   引用的语法:Type& name = var;

    d)  引用做函数参数呢?(引用做函数参数声明时不进行初始化) 

    引用属于C++编译器对C的扩展,不能用C语言的语法去思考它。

    普通引用 必须要初始化

    #include <iostream>
    using namespace std;
    
    //引用的概念
    int main(void)
    {
        int a=10;
        
        //引用的语法:Type& name = var;
        int &b=a; //int *const b=&a;
        b=100; //相当于把a修改成100
            //*b=100;
        printf("b:%d
    ",b);
        printf("a:%d
    ",a);
        
        a=200;
        printf("b:%d
    ",b);
        printf("a:%d
    ",a);    
        
        return 0;
    }

     运行结果为 

    a和b共用一个内存空间。

    void myswap01(int a, int b)
    {
        int c=0;
        c=a;
        a=b;
        b=c;
    }
    
    void myswap02(int *a, int *b)
    {
        int c=0;
        c=*a;
        *a=*b;
        *b=c;
    }
    void myswap03(int &a, int &b)
    {
        int c=0;
        c=a;
        a=b;
        b=c;
    }
    
    int main(void)
    {
        int x=10;
        int y=20;
        
        myswap01(x,y);
        printf("x:%d
    ",x);
        printf("y:%d
    ",y);    
        
        myswap02(&x,&y);
        printf("x:%d
    ",x);
        printf("y:%d
    ",y);    
        
        myswap03(x,y);
        printf("x:%d
    ",x);
        printf("y:%d
    ",y);    
        
        return 0;
    }

    myswap01函数实现不了交换,改变的是形参,只是一份拷贝;

    myswap02函数传递的是x,y的地址,改变的还是x,y的本身。故能实现交换;

    myswap03函数改变的是x,y的一个别名,实际改变的还是x,y。故能实现交换。

    复杂数据类型做函数引用

    //复杂数据类型的引用
    struct Teacher
    {
        char name[64];
        int age;
    };
    void printfT(Teacher *pT)
    {
        cout<<pT->age<<endl;
    }
    
    //pT是t1的别名,相当于修改了t1
    void printfT01(Teacher &pT)
    {
        pT.age=33;
        cout<<pT.age<<endl;
    }
    
    void printfT02(Teacher pT)
    {
        cout<<pT.age<<endl;
        pT.age=40;  //只会修改pT变量,不会修改t1变量
    }
    
    int main(void)
    {
        Teacher t1;
        t1.age=35;
        printfT(&t1);
        cout<<t1.age<<endl;
        
        printfT01(t1);
        cout<<t1.age<<endl;
        
        printfT02(t1);
        cout<<t1.age<<endl;
        
        cout<<"hello...."<<endl;
    }

    运行结果

  • 相关阅读:
    Magicodes.IE之花式导出
    Magicodes.IE之导入导出筛选器
    Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
    快速配置Azure DevOps代理服务器
    如何做好一个开源项目之徽章(二)
    使用Seq搭建免费的日志服务
    SpringBoot + SpringCloud Hystrix 实现服务熔断
    dedecms从word复制粘贴公式
    CuteEditor从word复制粘贴公式
    TinyMCE从word复制粘贴公式
  • 原文地址:https://www.cnblogs.com/Liu-Jing/p/9614849.html
Copyright © 2011-2022 走看看