zoukankan      html  css  js  c++  java
  • 第4课 布尔类型和引用

    1.  布尔类型

    (1)C++C语言基本类型系统之上增加了bool,其可能的取值只有true(1)false(0)

    (2)理论上bool只占用一个字节

    (3)bool类型是基本类型,可以用来定义bool型的全局变量、常量、指针和数组。。。。。。。。。。。

    (3)C++编译器会将0转换true(即10转换为false(即0

    【编程实验】布尔类型的使用  4-1.cpp

    #include <stdio.h>
    
     
    
    int main()
    
    {
    
        bool b = false;
    
        int a = b;
    
     
    
        printf("sizeof(b) = %d
    ", sizeof(b)); //1
    
        printf("b = %d
    , a = %d
    ", b, a);    //0, 0
    
     
    
        b = 3;  //编译器发现会bool型赋值非0,就会转化为1
    
        a = b;  //a为1
    
     
    
        printf("b = %d, a = %d
    ",b, a);
    
       
    
        b = -5; //非0,被转为1
    
        a = b;  //a为1
    
     
    
        printf("b = %d, a = %d
    ",b, a); //1,1
    
     
    
        a = 10;
    
        b = a; //非0,被转为1
    
     
    
        printf("a = %d, b = %d
    ",a, b); //10,1
    
     
    
        a = 0;
    
        b = a; //0
    
     
    
        printf("a = %d, b = %d
    ",a, b); //0,0
    
     
    
        return 0;    
    
    }

    运行结果:

      

    2. 三目运算符的升级

    (1)C语言中的三目运算符返回的是变量的值,因此不能作为左值使用

    (2)C++中的三目运算符: 可以直接返回变量本身

      ①如果?后面两个操作数有一个是常量,则行为与C语言的运算符一样返回的是变量的值

      ②如果?后面两个操作数都是变量,则返回变量的引用相当于变量本身)。如此,既可以作为右值,也可以作为左值使用

            

    3. C++中的引用

    (1)变量名回顾

    ①    变量一段实际连续存储空间别名

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

    ③    通过变量的名字可以使用存储空间。(变量的名字就是变量的值&变量名是取地址操作

            

     

    (2)问题:一段连续的存储空间只能有一个别名吗???

    —C++中新增加了引用的概念

    ①    引用可以看作一个己定义变量的别名

    ②    引用的语法Type& name = var;  //Type为类型名name为引用的名字,var为己定义的变量名

    ③    普通引用定义时必须用相同类型的变量进行初始化函数参数引用的初始化发生在函数被调用

          

    【实例分析】引用初体验  4-2.cpp

    #include <stdio.h>
    
    int main()
    {
        //引用初探
        int a = 4;
        int& b = a;//b为a的别名
    
        b = 5; //操作b就是操作a
        
        printf("a = %d
    ", a); //5
        printf("b = %d
    ", b); //5
    
        printf("&a = %p
    ", &a);
        printf("&b = %p
    ", &b);//&b等于&a
    
        //C++中的三目运算符
        int m = 1;
        int n = 2;
        
        printf("m = %d, n = %d
    ", m, n);
    
        (m < n ? m : n) = 3;//?后的m、n都是变量,返回的是引用,
                            //将3赋值给一个变量的引用,是合法的
    
    
        //(m < n ? m : 2) = 3;//?后的操作数2为常量,将返回的是值,
                              //从语义看,要将3赋值给2,是非法的
    
        printf("m = %d, n = %d
    ", m, n);
    
        //在C语言中,可通过其返回的是值的特点,可以通过如下方式来修改m或n
        *(m < n ?&m : &n) = 4;//返回m,n的地址,再通过地址给变量赋值,非法的。
        
        printf("m = %d, n = %d
    ", m, n);
    
        return 0;     
    }

    运行结果:

      

    4. 小结

    (1)bool类型是C++新增加基础类型,其值只能是truefalse

    (2)C++中的三目运算符如果其可能的返回都是变量时,返回的是引用可作为左值使用

    (3)C++中的引用可以看作变量的别名使用

  • 相关阅读:
    StringBuffer
    判断java标识符
    基本数据类型和String相互转换
    使用String
    Properties属性文件
    Map排序
    java集合之三映射:HashMap、Hashtable、LinkedHashMap、TreeMap
    列表、集合与数组之间相互转换
    自定义列表排序
    ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现
  • 原文地址:https://www.cnblogs.com/hoiday/p/10087783.html
Copyright © 2011-2022 走看看