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_

C++Primer快速浏览笔记-复合类型的更多相关文章

  1. C++Primer快速浏览笔记-类型转换

    bool b = 42; // _b is true_ int i = b; // _i has value 1_ i = 3.14; // _i has value 3_ double pi = i ...

  2. C++ Primer Plus 第四章 复合类型 学习笔记

    第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...

  3. 《C++ Primer Plus》读书笔记之二—复合类型

    二.第四章 复合类型  1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...

  4. C++ primer plus读书笔记——第4章 复合类型

    第4章 复合类型 1. 如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数. 2. 如果对数组的一部分进行初始化,则编译器把其他元素设置为0.因此,将数组中的所有元素初始化为0,只要显式 ...

  5. 学习C++.Primer.Plus 4 复合类型

    本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...

  6. 再读《C++ Primer》——变量和基本类型

    刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内 ...

  7. c++学习总结--复合类型,const。

    复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...

  8. Angular快速学习笔记(2) -- 架构

    0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...

  9. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

随机推荐

  1. history/location操作 /navigator 操作/ screen操作

    话说mac真的没广告...就凭这点,mac完胜.ei capitan 好牛畅,分屏很好用啊,回不去了. var hist=window.history; hist.go(param); // para ...

  2. C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示

    很多程序是只需要后台运行的,甚至不需要自己的应用界面.NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下: http://download.csdn.net/detail/u01031 ...

  3. ACM/ICPC 之 递归(POJ2663-完全覆盖+POJ1057(百练2775)-旧式文件结构图)

    POJ2663-完全覆盖 题解见首注释 //简单递推-三个米诺牌(3*2)为一个单位打草稿得出规律 //题意-3*n块方格能被1*2的米诺牌以多少种情况完全覆盖 //Memory 132K Time: ...

  4. CSS3 文本3D效果

    代码如下: <!DOCTYPE html> <html> <head> <style> h1 { color: #3D3D3D; font-size: ...

  5. ul 仿 table 循环滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. HTML5基本标签、样式

    感觉在Sublime Text3中写起来比较方便~~ 将HTML5中要用到的基本标签全部放在了一起,没有好好的整理,为了自己记忆的方便,就先这样写下来了~~ <!DOCTYPE html> ...

  7. Windows下批处理执行MySQL脚本文件

    转载至http://my.oschina.net/u/660932/blog/117929 一. @echo offSetlocal enabledelayedexpansion::CODER BY ...

  8. August 25th 2016 Week 35th Thursday

    Every man dies, but not every man really lives. 每个人都会死,但不是每个人都曾经真真活过. As I become older and older, I ...

  9. Linq查询

    //Linq查询 List<A1> a1 = new List<A1>(); a1.Add(, Name = , Gender = true }); a1.Add(, Name ...

  10. Mysql控制语句

    14.6.5.1 CASE Syntax 14.6.5.2 IF Syntax 14.6.5.3 ITERATE Syntax 14.6.5.4 LEAVE Syntax 14.6.5.5 LOOP ...