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++中引用的本质是一个指针常量。

  

原文地址:https://www.cnblogs.com/lvxiaoning/p/7481857.html