06-引用

作者: _东阁堂主_ | 来源:发表于2019-02-07 13:01 被阅读0次

    写在前面

    我们经常使用#ifndef、#define、#endif来防止头文件的内容被重复包含
    ◼#pragma once可以防止整个文件的内容被重复包含
    ◼区别
    #ifndef、#define、#endif受C\C++标准的支持,不受编译器的任何限制
    有些编译器不支持#pragma once(较老编译器不支持,如GCC 3.4版本之前),兼容性不够好
    #ifndef、#define、#endif可以针对一个文件中的部分代码,而#pragma once只能针对整个文件
    
    

    名词解释

    ◼ 在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值 
    ◼ 在C++中,使用引用(Reference)可以起到跟指针类似的功能
    ◼ 注意点 
    引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用) 对引用做计算,就是对引用所指向的变量做计算
    在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终” 
    可以利用引用初始化另一个引用,相当于某个变量的多个别名 不存在【引用的引用、指向引用的指针、引用数组】
    ◼ 引用存在的价值之一:比指针更安全、函数返回值可以被赋值
    接下来我们再来const--下一讲会专门来讲 字段(ios开发者不会陌生),常引用,数组的引用,表达式的引用
    

    常引用const

    将main.m 改为mian.mm 文件(以后若是同样的操作,将不再赘述)
    ◼ const是常量的意思,被其修饰的变量不可修改 
    如果修饰的是类、结构体(的指针),其成员也不可以更改
    ◼ 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用 
    const必须写在&符号的左边,才能算是常引用
    ◼ const引用的特点 可以指向临时数据(常量、表达式、函数返回值等) 
    可以指向不同类型的数据 
    作为函数参数时(此规则也适用于const指针)
    ✓ 可以接受const和非const实参(非const引用,只能接受非const实参)
    ✓ 可以跟非const引用构成重载
    ◼ 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
    
    int a = 20;
    int &page = age;
    其中page就是一个引用
    const 也是老生常谈的问题
    int a = 20;
    const int *page = age;
    page 被 const修饰,则page不可改变了,就是固定的值了
    
    int a = 10;
    int *p = &a;
    *p = 30;
    cout << a << endl;
    打印结果:
    30
    

    数组引用

    int array[] = { 10, 20, 30 };
    int (&rArray)[3] = array;
    cout << array << endl;
    cout << &rArray << endl;
    打印结果
    0x7ffeefbff54c
    0x7ffeefbff54c
    在函数调用,需要传入数组参数时,就可以传入引用
    void testArray(int (&array)[3])
    {
        cout << "size:" << sizeof(array) << endl;
        for (int i = 0; i < sizeof(array)/4; i++)
        {
            cout << array[i] << endl;
        }
    }
    //sizeof 计算对象的大小 是字节为单位的, sizeof(array)/4 就是有多小个int 数据
    int array[] = { 10, 20, 30 };
    testArray(array);
    打印结果:
    size:12
    10
    20
    30
    

    再举几个🌰(枚举,结构体)

    enum Season {
        Spring,
        Summer,
        Fall,
        Winter
    };
    
    struct Student {
        int age;
    };
    
    Season season;
    Season &rSeason = season;
    rSeason = Winter;
    cout << season << endl;
        
    Student stu;
    Student &rStu = stu;
    rStu.age = 20;
    cout << stu.age << endl;
    看下打印结果:
    3
    20
    
    

    装逼一下

    引用的本质
    ◼ 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
    ◼ 一个引用占用一个指针的大小
     
    

    完整代码demo,请移步GitHub:DDGLearningCpp

    当然C++大神就绕吧,非喜勿喷,毕竟这是个人的学习笔记📒

    相关文章

      网友评论

          本文标题:06-引用

          本文链接:https://www.haomeiwen.com/subject/mhidsqtx.html