浮点数
- float:至少32位
- double:至少48位,且不少于float
- long double:不少于double
float只能保存6位或7位有效数字,会丢失精度。
算数运算符
%为求余/求模,当其中一个为负数时,其结果满足**(a/b)b+a%b=a*
类型转换
- 赋值: 在进行赋值时,c++会自动将右值转换为左值,但有可能会降低精度,如浮点转换为整形、大浮点转换为小浮点以及大整形转换为小整形。
bool接受到0时将其转化为false,非零值则转换为true - 使用{}初始化: 允许整形转换为浮点型,但不能将浮点型转换为整形
- 表达式: 在表达式中,bool,char,short,unsigned char,singed char均将被转换成int后再进行计算,这种转换被称为整形提升。
在bool值用cout输出时,会被转换成整形,使用**cout.self(ios::noolalpha)**会使cout能输出True或false值。 - 传参: 由c++函数原型控制
- 强制类型转换: (typeName) value / typeName(value)
C++中提供的新类型转换方式static_cast(value)
复合类型
数组
不能将数组赋值给数组。
可以只初始化数组的一部分,如int a[4]={0,1},其他的元素将被初始化为0,若想要圈内部初始化为0,则只需要int a[4]={0}。
字符串
sizeof()为整个char数组的长度,strlen()是有效字符的长度
getline(name,length)为读取整行,length为长度限制,
String
- strcpy(): 复制
- getline(cin,name): 用于string的行读取。
原始字符串: 在输入例如\n的字符时,不会被转义而是直接输出原本内容个,使用时在字符串前面加上R
结构体
可以以{}初始化其中的值,同样可以省略其中的值。
枚举
可以将多个枚举值设置为相同的量。
一种方法:state=STATE(1),枚举变量state将被设置为STATE中值为1的枚举值。
指针
&代表取地址
*为解除引用运算符,对指针使用时,可以取得该地址储存的值
不允许直接将地址赋给指针,必须将整形的地址转换为指针类型赋值
值为0的指针被称为空指针,也就是nullptr。
delete将会删除指针指向的内存,并不会删除指针本身。
用new创建动态数组: 声明数组时就为数组分配了固定的内存,这种方式称为静态联编,在编译中就被加入了程序。
若使用new,则是在运行程序时根据需要创建数组,并可以动态选择数组的长度,这杯被为动态联编。
在释放是,要用delete [] ptr,若没有[],删除的则是指针当前指向的元素。
指针数组在进行+i时,实际上加的是它所指向的类型的字节数。
同样也可以用这种方式创建字符串,并用指针代替字符串的名称。
- 自动存储: 在函数内部定义的常规变量使用,在函数被调用时产生,在函数结束时被释放。
- 静态存储: 在整个程序执行期间都存在,使用static声明或在函数外部创建可以得到。
- 动态存储: 拥有单独的内存池,和自动与静态存储分开。数据的生命周期起不受函数或程序限制,但会导致内存不在连续,追踪内存位置更加困难。
array
ep:array<int,5> ary 创建了int类型,长度为5,长度是固定的,使用静态存储中的空间,更加安全。
ary[-1]:代表将现在指针智子昂的元素向前移动两位