• 第4课


    第4课 - 布尔类型和引用

    1. 布尔类型

      (1)C++ 在 C 语言的基本类型系统之上增加了 bool 类型,其可取的值只有 true(编译器内部用1表示) 和 false(编译器内部用0表示)

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

      (3)C++ 编译器将非0值转换true(即1)0值转换为false(即0)

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

     1 #include <stdio.h>
     2 
     3 int main(int argc, char *argv[])
     4 {
     5     bool b = false;    // 使用false关键字进行初始化
     6     int a = b;
     7     
     8     printf("sizeof(b) = %d
    ", sizeof(b));    // 1
     9     printf("b = %d, a = %d
    ", b, a);        // 0 0
    10     
    11     b = 3;
    12     a = b;
    13     
    14     printf("b = %d, a = %d
    ", b, a);    // 1 1
    15     
    16     b = -5;
    17     a = b;
    18     
    19     printf("b = %d, a = %d
    ", b, a);    // 1 1
    20     
    21     a = 10;
    22     b = a;
    23     
    24     printf("a = %d, b = %d
    ", a, b);    // 10 1
    25     
    26     a = 0;
    27     b = a;
    28     
    29     printf("a = %d, b = %d
    ", a, b);    // 0 0
    30     
    31     return 0;
    32 }
    bool类型的使用

        输出结果 i = 1  , *p = 99  , i = 99

        由这个结果可知,bool 类型本质上也是通过整型来实现的,使用了一个字节,获取 bool 类型变量的地址后通过指针依然可以修改 bool 变量的值。

        bool 类型在赋值的时候编译器会进行判断,是为 true 还是 false ,然后存储为1 或 0。

      使用 gdb 可以展现 C++ 中 bool 类型的本质,可以从存/取两个方面理解。

        

      存:编译器根据给 bool 变量赋的值来决定存储到内存中的值是 True(1) 还是 False(0)

      取:按照内存中存储的数据进行解析,像上面的例子,通过 char 指针改变 b 变量的值,后面 printf 打印 b 的值就为 100

        

    2. 三目运算符的升级

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

      (2)C++ 中的三目运算符

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

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

    3. C++ 中的引用

      (1)变量名的回顾

          ① 变量是一段实际连续存储空间的别名,程序中通过变量来申请并命名存储空间。

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

                  

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

      (2)C++中新增加了引用的概念

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

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

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

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int a = 4;
     6     int& b = a; // b为a的别名
     7 
     8     b = 5; // 操作b就是操作a
     9     
    10     printf("a = %d
    ", a); // 5
    11     printf("b = %d
    ", b); // 5
    12 
    13     printf("&a = %p
    ", &a);
    14     printf("&b = %p
    ", &b);  // &b等于&a
    15 
    16     // C++中的三目运算符
    17     int m = 1;
    18     int n = 2;
    19     
    20     printf("m = %d, n = %d
    ", m, n);
    21 
    22     (m < n ? m : n) = 3; // ?后的m、n都是变量,返回的是引用,
    23                          // 将3赋值给一个变量的引用,是合法的
    24 
    25     // (m < n ? m : 2) = 3; // ?后的操作数2为常量,将返回的是值,
    26                             // 从语义看,要将3赋值给2,是非法的
    27 
    28     printf("m = %d, n = %d
    ", m, n);
    29 
    30     return 0;     
    31 }
    C++的引用

    4. 小结

      (1)bool 类型是C++中新添加的基础类型,其值只能是 true false

      (2)C++中的三目运算符可作为左值使用

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

      (4)三目运算符的可能返回都是变量时返回的是引用

    注:本文总结于狄泰唐老师的《C++深度解析》课程

    狄泰QQ群:199546072

    本人QQ号:502218614

  • 相关阅读:
    lintcode491 回文数
    lintcode514 栅栏染色
    lintcode433 岛屿的个数
    lintcode142 O(1)时间检测2的幂次
    lintcode166 链表倒数第n个节点
    lintcode539 移动零
    lintcode: Check Sum of Square Numbers
    lintcode: Missing String
    lintcode 二叉树的锯齿形层次遍历
    Mysql 游标的定义与使用方式
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/7119512.html
Copyright © 2020-2023  润新知