zoukankan      html  css  js  c++  java
  • C++程序中的引用_3

    一。C++中的布尔类型

      1.C++在C语言的基本类型之上增加了bool

      2.C++中的bool可取的值只有true 和false

      3.理论上bool只占有一个字节

        如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。

      Tip:

        true代表真值,编译器内部用1表示(兼容C语言)。

        false代表非真值,编译器内部用0来表示。

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        int a;
        bool b = true;
        
        printf("b = %d, sizeof(b) = %d
    ", b, sizeof(b));
        
        b = 3;
        a = b;
        
        printf("a = %d, b = %d
    ", a, b);
        
        b = -5;
        a = b;
        
        printf("a = %d, b = %d
    ", a, b);
        
        a = 10;
        b = a;
        
        printf("a = %d, b = %d
    ", a, b);
        
        b = 0;
        
        printf("b = %d
    ", b);
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

    输出结果

      

     所有的C++编译器在赋值时候将非0值转化成True,0值转化成false。

    二. 三目运算符的升级

      1. C语言中的三目运算符返回的是变量值,不能作为左值出现。

      2. C++中的三目运算符可以直接返回变量本身,因此可以出现在程序的任何地方

      3.变量名回顾

        #变量是一段实际连续储存空间的别名。

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

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

    三。C++的引用

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

        1.引用可以看做一个已定义变量的别名。

        2.引用的语法:Type& name = var;

        int main()

        {

          int a = 4;

          int& b = a;

          b = 5;

          printf("%d ",a);

          printf("%d ",b);

          printf("%08X ",&a);

          printf("%08x ",&b);

          return 0;

        }

      输出:a = 5; b = 5

      注:引用作为普通参数的声明时需要初始化。

    四。引用的意义

      1.引用作为其他变量的别名而存在的,因此在一些场合可以代替指针

      2.引用相对于指针来说具有更好的可读性和实用性。

      

      注:引用作为函数参数的声明时不初始化。

    五、const 引用

      1. 在C++中可以声明const引用。

      2. const引用表示 const int& b = a;

      3. const 引用让变量编程只读变量。

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        int a = 4;
        const int& b = a;
        int* p = (int*)&b;
        
        //b = 5;
        
        *p = 5;
        
        printf("a = %d
    ", a);
        printf("b = %d
    ", b);
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

      4.当使用常量对const引用进行初始化(可以为常数)时,C++编译器会为常量值分配空间,并将引用名作为这段空间的别名。

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        const int& b = 1;
        int* p = (int*)&b;
     
        *p = 5;
        
        printf("b = %d
    ", b);
        return 0;
    }

      注意:使用常量对const引用初始化后将生成一个只读变量。

      5.引用有自己的存储空间吗?

      引用在C++中的内部实现是一个常指针

      Type& name <->Type *const name

      importance:

      # C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。

      #从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间,这是C++为了实用性而做出的细节隐藏。

               <=>   

    六。函数的返回值为引用时

      1.当返回栈变量(局部变量)

        # 不能成为其他引用的初始值

       

    #include <stdio.h>
    
    int& f()
    {
        static int a = 0;
        
        return a;
    }
    
    int& g()
    {
        int a = 0;
        
        return a;
    }
    
    int main()
    {
        int a = g();
        int &b = g();
        
        f() = 10;
        
        printf("a = %d
    ", a);
        printf("b = %d
    ", b);
        printf("f() = %d
    ", f());
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

    输出结果:a = 0;b = 随机值 ,f() = 10;

    #不能作为左值使用

      2.当返回静态变量或者全局变量

        #可以成为其他引用的初始值

        #既可以为右值,又可以作为左值。

    #include <stdio.h>
    
    int& f()
    {
        static int a = 0;
        
        return a;
    }
    
    int& g()
    {
        int a = 0;
        
        return a;
    }
    
    int main()
    {
        int a = g();
        int &b = g();
        
        f() = 10;
        
        printf("a = %d
    ", a);
        printf("b = %d
    ", b);
        printf("f() = %d
    ", f());
        
        printf("Press enter to continue ...");
        getchar();    
        return 0;
    }

    输出结果:a = 0; b = 随机值;f() = 10;

    七。小结:

      1. bool类型是C++新增加的基础类型。

      2. C++中的引用可以看作变量的别名来使用。

      3.C++中的常引用可以使得一个变量拥有只读属性

      4.C++中的常引用可以用常量初始化而得到一个只读变量

      5.C++中引用的本质是一个指针常量。

      

  • 相关阅读:
    params可变参数
    using释放资源
    第二章:深入C#数据类型
    体检套餐项目解析
    堆栈
    C#必看:《第17章节QQ管理系统》
    C#必看:《第15章节学生管理系统》
    ACM hdu 1008 Elavator
    jq尺寸和位置总结篇(width scrollTop position offset)
    find children slice
  • 原文地址:https://www.cnblogs.com/lvxiaoning/p/7481857.html
Copyright © 2011-2022 走看看