zoukankan      html  css  js  c++  java
  • C++Primer快速浏览笔记-复合类型

    C++Primer2.3节介绍了两种复合类型:引用和指针

    1.引用

    • 引用并非对象,它只是为一个已经存在的对象所起的别名。
    • 一旦初始化完成,引用将和它的初始值对象一直绑定在一起,不能重新绑定到另一个对象,因此引用必须初始化。
    • 定义引用时,程序把引用和它的初始值绑定到一起,而不是将初始值拷贝给引用。
    • 引用本身不是一个对象,所以不能定义引用的引用
    • 引用只能绑定在对象上,而不能与字面值或者某个表达式的结果绑定在一起。
    • 引用的类型必须和与之绑定的对象的类型严格匹配。但是有两种例外情况:

    1.初始化常量引用时允许用字面值或任意表达式作为初始值,只要该表达式的结果能通过类型转换成引用的类型即可。
    2.可以将基类的引用绑定到派生类对象上。

    举几个例子:
    int &refVal4 = 10; // 错误:引用类型的初始值必须是一个对象
    double dval = 3.14;
    int &refVal5 = dval; // 错误:此处引用类型的初始值必须是int型对象
    int i = 42;
    const int &r1 = i; // 允许将const int&绑定到一个普通int对象
    const int &r2 = 42; // 正确:r2是一个常量引用
    const int &r3 = r1 * 2; // 正确:r3是一个常量引用
    int &r4 = r * 2; // 错误:r4是一个普通的非常量引用


    2.指针

    指针也能实现对其他对象的间接访问。与引用不同的是。

    • 指针本身就是一个对象,允许对指针赋值和拷贝,在其生命周期内可以先后指向几个不同的对象。
    • 指针无须在定义时赋初值。
      获取对象的地址
      指针存放某个对象的地址,使用取地址符获取地址:
      int ival = 42;
      int *p = &ival;
      指针值
      指针的值(即地址)应属下列4种状态之一:
    1. 指向一个对象。
    2. 指向紧邻对象所占空间的下一个位置。
    3. 空指针,未指向任何对象。
    4. 无效指针。
      利用指针访问对象
      如果指针指向了一个对象(需要是有效指针),则可以使用解引用符*来访问该对象。可以对其进行赋值等操作。
      空指针
      空指针不指向任何对象,在试图使用一个指针前代码可以首先检查它是否为空。生成空指针的方法:
    • int *p1 = nullptr; // 等价于int *p1 = 0;

      c++11新标准,建议使用

    • int *p2 = 0; // 直接p2初始化为字面常量0
    • // 首先#include cstdlib
      int *p3 = NULL; // 等价于 int *p3 = 0;
      直接把值为0的int 变量赋给指针是错误的操作
      int zero = 0;
      pi = zero; // _error: cannot assign an int to a pointer_




  • 相关阅读:
    poj 1840 简单哈希
    poj 2151概率dp
    poj 3349 简单hash
    poj3274 hash
    poj 1459 最大流 Dinic模板题
    poj 3436 最大流-拆点
    poj 3020 二分图最大匹配
    poj 1094 简单拓扑排序
    poj3687 反向建图拓扑排序
    poj 3267
  • 原文地址:https://www.cnblogs.com/star91/p/4789998.html
Copyright © 2011-2022 走看看