• bool类型与其他类型转换时,0为false,1为true
  • 浮点数赋值给整数的时候,进行近似处理,结果仅保留浮点数小数点之前的部分
  • 整数赋值给浮点数的时候,小数部分记为0,如果该整数超过了浮点类型的容量,精度可能丢失
  • 当我们赋给无符号类型一个超出它表示的范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8bit大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际结果是该值对256取模后所得的余数。。因此把-1赋给unsigned char所得的结果是255.
  • 当我们赋给符号类型一个超出它表示范围的值时,结果是未定义的,此时程序可能继续工作,可能崩溃,也可能生成垃圾数据。

使用无符号类型的表达式

//如果一个算术表达式中既有int类型,又有无符号数,int会转换为无符号数
unsigned u = 10;
int i = -42;
std::out<< i + i << std::endl; //输出-84
std::out<< u + i << std::endl; //把负数转换成无符号数,类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。如果int占32位,输出4294967264 //当从一个无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负数
unsigned u1 = 42, u2 = 10;
std::out<< u1 - u2 <<std::endl; //正确:输出32
std::out<< u2 - u1 <<std::endl; //正确:不过结果是取模后的值 //无符号数在循环中的应用 //此处永远都不会输出0,u永远也不会小于0,此处会死循环
//每次当u=0,--u之后,-1被自动的转换成一个合法的无符号数
for(unsigned u = 10;u >= 0 ; --u)
std::out<< u <<std::endl; //乘法运算同样存在上述现象
a = -1;
b = 1;
//如果a和b都是int类型,a*b 的结果肯定是 -1
//可是假如 b 是 unsigned,则结果须视当前机器上int所占位数而定

  

  转义序列

  换行符 \n     横向制表符 \t     报警(响铃)符  \a

  纵向制表符  \v  退格符  \b      双引号  \"

  反斜线  \\    问号  \?      单引号  \'

  回车符  \r     进纸符  \f

  变量声明和定义

  变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。

  如果想声明一个变量而非定义它,就在变量名前面添加关键字extern,而且不要显示地初始化变量。

  

extern int i;    //声明i而非定义i
int j; //声明并定义j //任何包含了显示初始化的声明即成为定义
extern double pi = 3.1416 ;//此处赋初始值抵消了extern的作用,就变成了定义

  变量只能被定义一次,但是可以被声明多次。

  引用

  引用必须初始化,引用即别名。

  引用并非对象,相反的,它只是为一个已经存在的对象所起 的另外一个名字。

  可以在一条语句中定义多个引用,但是每个引用标识符都必须以&开头。// int i1 = 1024,&i1 = i1,&i2 = i1,&i3 = i1;

  • const引用可用一个表达式初始化//int ia =1 ; const int res = ia * 8;
  • 基类指针或引用可绑定到派生类对象
  • 除以上两种情况外,其余引用都要和其绑定的对象类型严格匹配。

  指针

  指针与引用的差异:

  1. 指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象
  2. 指针无须在定义时赋初值

  指针存放对象的地址,通过取地址符&获取对象地址。

   指针的值(即地址)应属下列四种状态:

  1. 指向一个对象
  2. 指向紧邻对象所占空间的下一个位置
  3. 空指针,意味着指针没有指向任何对象
  4. 无效指针,也就是上述情况之外的其他值    

  利用指针访问对象

  使用解引用符(*)来访问指针指向的对象。

  

  空指针

  

int * p1 = nullptr;//等价于 int * p1 = 0;
int * p2 = 0; //直接将p2初始化为字面常量 0
//需要首先#include cstdlib
int * p3 = NULL;//等价于int * p3 = 0; NULL是预处理变量,定义在头文件cstdlib中,它的值就是0 //预处理变量不属于命名空间std,它由预处理器负责管理,因此可以直接使用,而无须添加std::
//当用到一个预处理变量的时候,预处理器会自动将它替换为实际值。

  指针的比较

  • 任何非0指针对应的条件值都是true.
  • 如果两个指针存放的地址值相同,则它们相等;反之它们不相等。
  • 这里两个指针存放的地址值相同(两个指针相等)有三种可能:
  1. 它们都为空
  2. 都指向同一个对象
  3. 都指向了同一个对象的下一地址

  

  void* 指针

  void* 是通用指针,任何类型的指针都可以转换为void*.

  不能直接操作void*指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。

  

  const 限定符

  因为const对象一旦创建后,其值便不能更改,所以const对象必须初始化。

  默认状态下,const对象仅在当前文件内有效。如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern.  

  extern const int buffsize = 1024;

  const的引用

  对常量的引用,其引用的对象也必须是一个常量。  

const int ci = 1024;
const int &r1 = ci;//正确,引用及其对应的对象都是常量
r1 = 42; //错误,r1是对常量的引用
int &r2 = ci; //错误,试图让一个非常量引用指向一个常量对象

  

   指针与const

   指向常量的指针  

const double pi = 3.14;
const double *cptr = π

  

   常量指针

    指针是对象而引用不是,因此就像其他对象类型一样,允许把指针本身定为常量。常量指针(const pointer)必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。

    把*放在const之前用以说明指针是一个常量,这样的书写隐含着一层意味,即不变的是指针本身的值而非指向的那个值:

  

int errNum = 0;
int *const curErr = &errNum; //curErr将一直指向errNum
const double pi = 3.14159;
const double *const pip = π//pip是一个指向常量对象的常量指针

  可以通过从右向左的方式解析该声明的含义:

  离currErr最近的符号是const,意味着curErr本身是一个常量对象,下一个符号是*,意思是curErr是一个常量指针。

  类似的,推断出pip是一个常量指针,它指向一个双精度浮点型常量。

  顶层const与底层const

  顶层const表示指针本身是个常量。

  底层const表示指针所指的对象是一个常量。

  详见 : P57

《C++ Primer》读书笔记(二)-变量和基本类型的更多相关文章

  1. C++ Primer 学习笔记_5_变量和基本类型(续2)

     变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...

  2. C++primer读书笔记9-转换和类类型

    有时指定自己的类类型来表示某些类型的数据,如SmallInt,然后在为了便于计算将指定一个转换算,类类型,在某些情况下,自己主动转换为指定的类型 <1>转换操作符 operator typ ...

  3. 02.第二章_C++ Primer学习笔记_变量和基本类型

    2.1  基本内置类型 2.1.1  算术类型 算术类型包括两类:整型和浮点型 2.2  变量 2.3  复合类型 2.4  const限定符 2.5  处理类型 2.6  自定义数据结构

  4. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  5. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  6. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  7. spring揭秘 读书笔记 二 BeanFactory的对象注册与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,而且IoC Service Pr ...

  8. ES6读书笔记(二)

    前言 前段时间整理了ES6的读书笔记:<ES6读书笔记(一)>,现在为第二篇,本篇内容包括: 一.数组扩展 二.对象扩展 三.函数扩展 四.Set和Map数据结构 五.Reflect 本文 ...

  9. spring揭秘 读书笔记 二 BeanFactory的对象注冊与依赖绑定

    本文是王福强所著<<spring揭秘>>一书的读书笔记 我们前面就说过,Spring的IoC容器时一个IoC Service Provider,并且IoC Service Pr ...

随机推荐

  1. 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

    开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式. 用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题. 今天在解析Json的多级 ...

  2. HTML5 JS 实现浏览器全屏(F11的效果)

    项目中有需要使用JS来控制浏览器全屏的方法 DEMO地址: http://zhongxia245.github.io/demo/js2fullpanel.html function fullScree ...

  3. React 异步组件

    之前写过一篇 Vue 异步组件的文章,最近在做一个简单项目的时候又想用到 React 异步组件,所以简单地了解了一下使用方法,这里做下笔记. 传统的 React 异步组件基本都靠自己实现,自己写一个专 ...

  4. ubuntu18.04 mariadb start失败

    在Ubuntu 安装mariadb 再restart 后出现错误 journalctl -xe 发现 apparmor权限问题 AppArmor 是一款与SeLinux类似的安全框架/工具,其主要作用 ...

  5. 百度图表库ECharts

    本文主要包含ECharts的介绍和教程.关于ECharts的应用就不多了,像经营状况.收支情况.数据分析等都需要以图表的形式展现,因为这样更直观. 一.介绍 ECharts,一个使用 JavaScri ...

  6. [转]TortoiseSVN客户端重新设置用户名和密码

    在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...

  7. 关于SX1278、SX1276、SX1262的简单详解资料

    通常的物联网解决方案和设备一直都非常昂贵,或在实施中不切合实际.理想的无线连接技术应该是低成本.高可靠性的,可进行长距离传输,且拥有超长的电池续航时间.像zigbee.Bluetooth和Wi-Fi这 ...

  8. MySQL(一)索引的创建和删除

    索引是存储引擎用于快速找到记录的一种数据结构,这是索引的基本功能. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.接下来将讲述如何创建.查看和删除索引. 索引分 ...

  9. PAT乙级1006

    1006 换个格式输出整数 (15 分)   让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正 ...

  10. sudo 其他用户执行命令

    sudo -E -u clouder /home/clouder/vs/program/chatserver/bin/startup.sh -E 加载用户环境变量