zoukankan      html  css  js  c++  java
  • 引用

    --------siwuxie095

       

       

       

       

       

    引用类型:

       

       

    引用是什么?

       

    在计算机中,引用就是变量的别名

       

       

    引申到生活中,引用就像是一个人的外号、小名、昵称,

    如:生活大爆炸中 Sheldon 是大名,Shelly 则是昵称,即别名

       

       

    1、作为别名来说,能不能只有别名,而没有真实姓名?

    2、如果只有别名,怎么对他称呼呢?

    3、如果只有别名,是不是就变成了他的真实姓名了呢?

       

    可见:只有别名,在生活中也是无法成立的,

    在计算机中,如果只有别名,也是没有办法进行命名的

       

       

       

       

    引用的不同应用:

       

    1、基本数据类型的引用

       

    2、结构体类型的引用

       

    3、指针类型的引用

       

    4、引用作函数参数

       

       

       

       

       

       

    基本数据类型的引用:

       

    如:

       

       

       

    引用必须初始化:如果只起 b 这样一个别名(引用),

    后面什么都没有(即没有初始化操作)或 &b=NULL

    那么在编译时计算机会报错,因为只有别名是无法成立的

       

    如果给 b 赋值 10,a 的值也由原来的 3 变成了 10

    即 无论对它的别名做任何操作,其实都是对它本身做操作

    就比如:让 Shelly 去做什么事,Sheldon 本身也去做什么事了。

    打了 Shelly 实际就是打了 Sheldon,道理都是一样的

    别名本身的操作 实体的操作是一样的,等效的

       

       

       

       

       

    结构体类型的引用:

       

    先定义一个结构体:名字是 Coor 即坐标

       

       

    在函数中使用所定义的结构体:

       

       

       

       

    先定义结构体变量 c1,并起了一个别名 c,

    分别对 c 下的 x 和 y 做赋值操作,即用别名

    对相应的成员做操作,打印实体 c1 时 x 和 y

    已经变成了 10 和 20

    (即操作 c 和 操作 c1 没有任何区别)

       

       

       

       

       

    指针类型的引用:

       

    写法形式与众不同:

       

       

       

    如:

       

       

       

    指针 p 指向整型数据 a,然后将 q 当做指针 p 的别名(引用),

    q 做相应的操作:把 20 赋值给 *q,相当于把 20 赋值给 *p,

    相当于把 20 赋值给 a,a 由原来的 10 变成了 20

       

       

       

       

       

    引用作函数参数:

       

    先看看 C 语言中的经典程序:交换两个值

       

    指针变量作函数形参:

       

       

    调用时,要写成取地址的形式:

       

       

       

    显然,写法上非常麻烦,理解上也不易

       

    如果使用引用:

    传进来的实参会被形参 a 和 b 起别名,

    通过别名进行操作,从而操作了实际的

    参数

       

       

    调用时,也很简单,传入 x、y,相当于 a 是 x 的别名,

    b 是 y 的别名,a 和 b 交换,即 x 和 y 交换

       

       

       

       

    如:

    #include <stdlib.h>

    #include<iostream>

    using namespace std;

       

       

    int main(void)

    {

    int a = 3;

    int *p = &a;

    int *&q = p;//指针类型的引用

    *q = 5;

    cout << a << endl;

    system("pause");

    return 0;

    }

       

       

    //结构体对象的引用

    //typedef struct

    //{

    // int x;

    // int y;

    //

    //}Coord;

    //

    //

    //int main(void)

    //{

    // Coord c;

    // Coord &c1 = c;

    // c1.x = 10;

    // c1.y = 20;

    // cout << c.x << "," << c.y << endl;

    // system("pause");

    // return 0;

    //}

       

    //函数形参的引用

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

    //}

       

       

    //C语言特色的传参

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

    //}

       

    vs2013中:

       

       

       

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    PPT图片
    饥荒Steam相关mod代码
    Ubuntu20.04更换阿里源 source.list文件
    中断处理与进程调度的区别与联系
    原语和系统调用的区别
    立下个flag,这个月底之前要发一个深度学习入门系列的文章
    conda安装skimage
    机器学习入门(三)
    zip安装的MySQL绑定my.ini配置文件
    Anaconda配置安装
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6390037.html
Copyright © 2011-2022 走看看