坑
初始化
- 列表初始化且初始值存才丢失信息的风险时,编译器会报错
long double id =3.1415926536;
int a{id}, b = {id};
- 一个未被初始化(既未被显式初始化也未被默认初始化)的内置类型变量,如果试图拷贝或以其他形式访问此类型时,将引发错误。
- 如果一个类要求每个对象都要显示初始化,如果创建时未显示初始化,将报错
变量名/标识符
- 不能以连续的两个下划线开头
- 不能以下划线紧连大写字母开头
- 函数体外:不能以下划线开头
指针
- 试图拷贝或以其它形式访问无效指针的值将引发错误
- 空指针不是无效指针
- 但是访问空指针会带来无法预计的后果,因此也是应该避免的
- 把
int
变量赋值给int
型指针会报错,即使int
变量的值为0也不行,但字面值0是可以复制给指针的,得到一个空指针。 - 使用未经初始化的指针,经常会来带错误
常量
- 非常量引用的初始值类型必须与被引用对象内型一致;
-
- 非常量引用的初始值类型必须为左值;
int i = 42;
const int &r1 = i; //正确
const int &r2 = 4; //正确
const int &r3 = r1 *2; //正确:常量引用的初始值可以是任意表达式或初始值
int &r4 = r1 *2; //错误:非常量引用的类型必须一致,等号右边的类型是一个常量引用
int &r5 = 4; //错误
Cha1
main
函数
- 返回的类型必然是
int
即整数型 - 因此,
return
返回一个整数,0
表示成功,非0
返回值由系统指定,一般表示不同的错误类型## 输出运算符:<<
std::cout << "Enter tow numbers:" << std::endl;
- 左侧必须是一个
ostream
对象,右侧是要打印的值 - 将右侧给定的值写入左侧的
ostream
对象中,第一个运算符的结果作为第二个运输符的对象。
(std::cout << "Enter tow numbers:") << std::endl;
std
是标准命名空间,标准库定义的所有名字都在namespacestd
中- 标准库中定义的所有名字都在命名空间
std
中。 ::
:作用域运算符
以输入流为判断条件
- 当输入流结束时即遇到文件结束符或输入流无效时即读入的值类型不对时,变为
False
- 因此输入流要有结束符,windows系统中:
Ctrl + Z
Dev-C++包含自动的头文件
将头文件放入路径:D:\Program Files (x86)\Dev-Cpp\MinGW64\include
Cha2
2.1变量和基本类型
无符号数值的问题
- 一个负数和无符号正整数相加时,有符号的负数会被强制转化为无符号的正整数;
- 整数在计算机内是按补码形式存储的。
参考
计算机中整数为什么以「补码」的形式存储?
负数时的有符号整型和无符号整型的转换
浮点数的存储
- 先将带小数的十进制数转为带小数的2进制数;
- 再用科学计算法表示为: 1. ∗ ∗ ∗ ∗ × 2 n 1.****\times2^n 1.∗∗∗∗×2n;
- 第一位表示正负符号,32位时用8位表示指数,64位时用11位表示指数,余下表示****的尾数部分,分别用23bit和52bit存储尾数。
字符串的存储
- 字符串是以数组的形式存在内存中
- 数组以
Null
结尾,占用一个字节,标记字符串的结尾
数据结构-节点
- 每个
Node
包含一个数据和一个指针 - 指针存储下一个
Node
的内存地址,一直向下,形成一个链接 - 循环型链表:最后一个
Node
的指针指向开头 - 非循环性链表:最后一个
Node
的指针是Null
字面值
- 即“表面值”,相对应的是存储在内存的值
- 字面值常量的形式和值决定了它的数据类型,也就是存储的值
- 字符串
"A"
的字面值是:字符A
加一个空字符'\0'
左值右值
- 左值:既能够出现在等号左边也能出现在等号右边的变量(或表达式)
- 右值:右值指的则是只能出现在等号右边的变量(或表达式)
- 变量是左值,常量是右值