第二章 变量和基本类型
梗概:第二章讲解了C++语言里的一些基本的数据类型和变量等等,较为琐碎。
2.1 基本内置类型
算术类型包含整型和浮点型。整型包括整数,布尔和字符。各类型在不同机器上占的大小不一。
带符号型和无符号型区间范围不同。无符号型无负数。
练习2.1 int至少和short一样大,long至少和int一样大,long long至少和long一样大。无符号型没有符号位,只代表大于0的数字或字符。符号型首位是符号位,可以表示负数。 float比double精确数字少,建议一般选用double。
练习2.2 利率本金和付款都可以选用double或 unsigned double。因为都可能使非整数,而且都不会小于0。
2.1.2 类型转换
非0数字到布尔型为真,0为假。
无符号数过大,会得到取模后的值。
给有符号类型数字过大,结果未定义。
浮点数转整数截断取整。
整数转浮点数可能损失精度。
int与uint计算,转为uint,循环容易出错。避免混用。
练习2.3 32 -32 32 -32 0 0
2.1.3字面值常量
0开头八进制, 0x开头十六进制。
字符串常量最后添加空字符'\0'。连续的字符串会被认为使一个。
指定字面量类型的前缀与后缀。
练习2.5(a)char型 wchar型 字符串型 wchar串
(b) int uint long ulong 八进制int 十六进制int
(c) double float longdouble
(d) int uint double double
练习2.6 有区别,第二组为八进制int,09不合法。
练习2.7 (a)字符串 (b)long double (c) float (d) long double
2.2变量
变量提供具名的可供程序操作的存储空间。变量即对象。
2.2.1 变量定义
变量定义,首先是类型说明符,后面是变量名列表,分号结束。定义时赋值称为初始化。初始化与赋值是两种操作。
列表初始化(){} 使用花括号{}如果有丢失信息风险将报错。
没有指定初始值的变量会被默认初始化。函数体外变量初始化为0,函数内的内置类型不被初始化,值不定。类自己决定初始化。
练习2.9 (a) 非法 解释1:先定义后使用 解释2:cin>>x语句中x是对象但int input_value返回值不是对象 (b) 非法,丢失信息。
(c) 初始化不是赋值语句。 (d) 正确
练习2.10 空串 0 未定义 空串
2.2.2变量声明与定义的关系
变量声明是使程序知道此变量,加extern关键字,不初始化。变量可定义一次,声明多次。
练习2.11 (a)定义 (b)定义 (c) 声明
C++使一种静态类型语言,会在编译阶段检查类型,因此需要提前声明类型。
2.2.3 标识符
注意命名规范。下划线数字字母,下划线字母开头。
练习2.12 (a) F (b) T (c) F (d) T (e) T
2.2.4 名字作用域
函数外定义:全局作用域。函数块内定义:块作用域。
嵌套作用域:优先内部作用域。::x访问全局变量x。
练习2.13 100
练习2.14 合法 100 45
2.3 复合类型
基于其他类型定义的数据类型。本章介绍引用与指针。
2.3.1 引用
引用是给对象起另一个名字,引用与另一个对象绑定,无法更改,因此必须初始化。
引用本身不是一个对象,只是已存在对象的别名。因此不能定义引用的引用。
一般情况引用需要与被绑定对象类型严格匹配,如 int a = 3; int &c = a;
练习2.15 (a) T (b) F 绑定目标不是对象 (c) T (d) F 未初始化
练习2.16 (a) T (b)T类型转换 (c)T (d)T
练习2.17 10 10
2.3.2 指针
指针是指向某一地址的对象。
&d取d的地址。指针指向的对象需要与指针类型匹配。
指针的值为4种。
*p成为解引用操作,操作*p等同于操作p指向的对象。
空指针nullptr NULL 0
建议初始化所有指针。
操作指针需要指针拥有合法值。指针相等是指地址值相等。
void*指针可以存放任意对象的地址,但不能直接操作所指对象。
练习2.19 指针是对象,值可以更改。引用是别名不是对象,需要初始化且不能更改。
练习2.20 i = 42*42;
练习2.21 (a) 指向对象和指针类型不匹配 (b) 不能把int变量赋给指针 (c) 正确
练习2.22 判断p指针是否为空指针 判断p指向的对象是否为0
练习2.23 不能。因为当指针p值不定时,做出的操作时不可预料的。
练习2.24 void*可以赋值任何类型的指针。
2.3.3 理解复合类型的声明
定义包括一个基本数据类型和一组声明符。& *都只是声明符的一部分。
指向指针的指针与指向指针的引用。
练习2.25(a)整型指针 整型对象 整型引用 (b)整型对象,整型指针 (c)整形指针 整型对象