第一章 C++中的符号
词法记号
- 关键字:
C++预先声明的单词。
- 标识符:
程序员自定义的单词。
1、由下划线、数字、字母组成。
2、字母区分大小写。
3、以下划线或者字母开头。
4、不能是关键字。
- 操作符(运算符):
+-*/
等
- 分隔符:
( ) { } , : ;
- 文字:
直接使用符号表示的数据,数值,字符、字符串、布尔文字等。
- 空白:
空格、制表符、回车符、换行符、注释。
第二章 基本数据类型
基本数据类型
类型名 | 长度 | 取值范围 |
---|---|---|
bool |
1 | false, true |
char |
1 | -128-127 |
signed char |
1 | -128-127 |
short |
2 | -32768-32767 |
unsigned short |
2 | 0-65535 |
int |
4 | -2147483648-2147483647 |
unsigned int |
4 | 0-4294967295 |
long |
4 | -2147483648-2147483647 |
unsigned long |
4 | 0-4294967295 |
float |
4 | … |
double |
8 | … |
long double |
8 | … |
CRE:在32位操作系统上long和int长度都是4字节,但是在16位和64位系统上长度不一样。
CRE:long long在任何平台上都是8字节。
常量
- 整型常量:
例如999、-999、999l、999u。 - 实型常量:
例如99.9、-99.9、99.9f。 实型常量默认double型,加后缀f可以使其称为float型。 - 字符常量:
※包含一般字符和不可显示字符。 ※ASCII表示法:<八进制数>或者\x<十六进制数>,一般字符和不可显示字符都适用。十六进制数>
※转义序列:
|不可显示字符 字符常量形式 ASCII十六进制形式 |
|-|
|响铃 \a \x07 |
|换行 \n \x0A |
|水平制表符 \t \x09 |
|垂直制表符 \v \x0B |
|退格 \b \x08 |
|回车 \r \x0D |
|换页 \v \x0C |
|字符‘\’ \ \x5C |
|双引号 \” \x22 |
|单引号 \’ \x27 |
- 字符串常量:
※一组用双引号括起来的字符序列。 ※在内存中存放形式是:字符按次序存放,每个字符占一个字节,末尾添加”\0”结尾。 - 布尔常量:
※true和false。
变量
变量声明: ※注:声明变量不一定分配内存,只是让编译器“认识”这个标识符。 int num; float a,b,c; 变量定义: ※注:定义变量意味着给变量分配内存空间。 ※注:定义变量的同时,可以给它赋初始值,称为初始化。实质是给内存单元赋值。 int num =3;(或者 int num(3);) char c = ‘a’; ※变量的存储类型: ※auto、register、extern、static ※没有字符串变量。C#中string是String类的语法糖。
※符号常量
宏常量:
※用#define定义宏常量:#define 常量名 常量值 (示例:#define day 7)
const
常量:
普通常量。(CRE:其实只是readonly)
※const符号常量声明: const 类型名 常变量名 = 常量值 (示例 int day = 7;)
※const符号常量提高程序可读性。
constexpr
常量:
编译时常量。(CRE:真正的const)
左值和右值
左值: ⭐既能出现在赋值表达式右边也能出现在赋值表达式左边的值或表达式。 ⭐左值在内存中有地址。 右值: ⭐只能出现在赋值表达式右边的值或表达式。 ⭐右值在内存中没有地址,是表达式结束以后就不存在的临时值。
第三章 数据类型转换
隐式转换
※编译系统自动对数据的转换称为隐式转换。
※隐式转换是安全的。数据由低类型数据转换为高类型数据,没有精度损失。
高低顺序:
低 > char
> short
> int
> unsigned int
> long
> unsigned long
> float
> double
> 高
C语言显式转换
格式:
(类型名)表达式
类型名(表达式)
C++语言强制转换
const_cast<类型名>(表达式)
功能是删除变量的const属性,方便再次赋值。
static_cast<类型名>(表达式)
—主要用途—
- 强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。
- 子类对象指针向父类对象指针转换。(安全)
- 基类对象指针向子类对象指针转换。(没有类型检查,不安全)
- 把void指针转换成目标类型的指针。(没有类型检查,不安全)
- 把任何类型的表达式转换成void类型。
—注意事项—
① 不能用于两个不相关类型的转换,如整形和整形指针之间的转换。
reinterpret_cast<类型名>(表达式)
用来处理无关类型之间的转换。它会产生一个新的值,这个值会有与原始表达式有完全相同的比特位。即字面意思“重新解释”。
—主要用途—
- 把一个指针转换为任意类型的指针。
- 将指针或引用转换为一个足够长度的整形。
- 将整型转换为指针或引用类型。
dynamic_cast<类型名>(表达式)
—主要用途—
主要用于基类指针和子类指针的向上向下转换。(安全)
—注意事项—
①不能用于基本数据类型的转换。
②dynamic_cast是运行时处理的,会进行类型检查。
③dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。
④如果转换成类指针类型,那么表达式也必须是一个指针,如果转换成引用类型,那么表达式也必须是一个引用。
※补充:
Cre:在C#使用as关键字和Convert类用于转换数据。
第四章 运算符与表达式
概述
※按操作数:一元(单目)运算符、二元(二目)运算符、三元(三目)运算符。 ※按类型:算术运算符、关系运算符、逻辑运算符等。
算术运算符
※基本运算符:”+”、”-“、”*”、”/”、”%”(加减乘除余)。 ※自增自减运算符:”++”、”- -“(分前置和后置)。 ※算术表达式:算术表达式的值当前置/后置时不一样。
赋值运算符
※基本的赋值运算符:”=”。 ※复合的赋值运算符:”+=”、”-=”、”*=”、”/=”、”%=”。 ※赋值表达式:表达式类型为等号左边对象的类型,值为等号左边被赋值后的值。 逻辑运算符与关系运算符 ※逻辑运算符:”>”、”<”、”>=”、”<=”。(高优先级)。”= =”、”!=”。(低优先级) ※关系运算符:”!”(高优先级)、”&&”(中优先级)、”||”(低优先级)。 ※逻辑表达式:值为bool类型,关系表达式是一种最简单的逻辑表达式。
条件运算符
※条件运算符”?”是C++唯一的三目运算符。
sizeof运算符
※格式1:sizeof (类型名)
※格式2: sizeof 表达式 / sizeof(表达式)
※值为指定的类型或者表达式结果的类型所占字节数。
位运算符
※按位与:”&”
※按位或:”|”
※按位异或:” ^ ”
※按位取反:”~”
※移位:”«”\”»”
逗号运算符
★逗号运算符优先级是最低的。 ※逗号表达式:逗号表达式值为系列中最后一个表达式的值。
第五章 流程控制语句
基本控制结构
算法的基本控制结构有三种:顺序结构、选择结构、循环结构。
选择结构
if
语句:
※if是专门用来实现选择结构的语句。
else if
语句:
※else if可以实现多重选择结构。
switch
语句:
※switch也可以实现多重选择结构。
循环结构
while
语句
do while
语句
for
语句
※其他控制语句
break
:跳出循环。
continue
:结束本次循环。
goto
(不建议使用):goto 语句标号。
(END)