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;
    }

    运行结果

  • 相关阅读:
    手动删除木马程序
    病毒注册表常用目标Svchost和Explorer
    对电脑假死现象的修复
    "添加与删除程序"报rundll32错误
    通过注册表regedit对Windows回收站进行恢复
    Win7的话,可能有十种简单的方法进行提速呢
    Windows死机的话,可能的一些猫病
    Android开发发布真机调试
    Java Web-----JSP与Servlet(一)
    Java——Log4j与Log4j2
  • 原文地址:https://www.cnblogs.com/Liu-Jing/p/9614849.html
Copyright © 2011-2022 走看看