zoukankan      html  css  js  c++  java
  • C++ 引用(别名)

    C++中的引用

    引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

    引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某

    一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。

    引用的特点:

      ①一个变量可取多个别名。

      ②引用必须初始化,只有别名是不能成立的。

      ③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。

    C++ 引用 vs 指针

    引用很容易与指针混淆,它们之间有三个主要的不同:

    • 不存在空引用。引用必须连接到一块合法的内存。
    • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
    • 引用必须在创建时被初始化。指针可以在任何时间被初始化

    1、基础数据类型引用:

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    int main(void)
    {
        int a=10;
        int &b=a;    // 给a起一个别名b
        
        b=20;        // 对b操作和对a操作效果是一样的
        cout << a <<endl;
    
        a=30;
        cout << b << endl;
    
        system("pause");
        return 0;
    } 

     运行结果:20   30

    2、结构体类型的引用

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    typedef struct // 定义一个结构体
    {
        int x;
        int y;
    }Coord; // 结构体的名字
    
    int main(void)
    {
        Coord c;
        Coord &c1 = c; // 给c起一个别名c1
    
        c1.x = 10;   // 对c1操作相当于对c操作
        c1.y = 20;
    
        cout << c.x << "," << c.y << endl;
    
        system("pause");
        return 0;
    }

    运行结果:

    3、指针类型的引用:

    格式:类型  *&指针引用名 = 指针简而言之:给地址起一个别名

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    int main(void)
    {
        int  a = 3;
        int *p = &a;
        int *&q = p;
    
        cout << p << endl;  //  P = 0093FC60
        cout << &q << endl; // &q = 0093FC54
        cout << *&q << endl;//*&q = 0093FC60
    
        *q = 5;
        cout << a << endl;
    
        system("pause");
        return 0;
    }

    运行结果:

    4、函数参数引用:

    以前我们在C语言中交换a,b的位置时:

    void fun(int *a,int *b)
    {
        int c;
        c  = *a;
        *a = *b;
        *b = c;
    }

    调用的时候我们需要吧参数的地址传进去:

    int x =10,y = 20;
    fun(&x,&y);

    而当我们引入了引用,事情就方便多了

    void fun(int &a,int &b) // 形参就是引用别名
    {
        int c = 0;
        c = a;
        a = b; // a和b都是以别名形式进行交换
        b = c;
    }

    调用传参

    int x =10,y = 20;
    fun(x,y);

    代码示例:

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    void fun(int &a,int &b)
    
    int main(void)
    {
        int x =10;
        int y =20;
        cout << x << "," << y << endl;
    
        fun(x,y);
        cout << x << "," << y << endl;
    
        system("pause");
        return 0;
    }
    
    void fun(int &a,int &b)
    {
        int c = 0;
        c = a;
        a = b;
        b = c;
    }

    输出结果:

  • 相关阅读:
    洛谷——P1970 花匠
    洛谷—— P1969 积木大赛
    洛谷——P1966 火柴排队
    洛谷——P1965 转圈游戏
    python练习-跳出多层循环和购物车
    WinCE设置多国语言支持
    java开发环境搭建
    MCC(移动国家码)和 MNC(移动网络码)
    技术团队新官上任之基层篇
    技术团队新官上任之中层篇
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9009293.html
Copyright © 2011-2022 走看看