CS C++ Code
前言
笔者觉得自己C++语法太差,还停留在只有竞赛够用的垃圾水平,于是决定恶补
Fake C++

Real C++

实际上是笔者现在连OOP都看不懂
基本语法
enum
枚举
适合用来定义一组有限、离散的常量,如状态机、错误码、类型分类等
1 | enum Level |
默认的话,会分配给第一个变量low
一个下标0
,然后第二个变量就会有下标1
,以此类推,比如
1 | enum Level myLevel = MEDIUM; |
如果想改变下标,有两种方式:
- 给每个变量都分配下标
1 | enum Level |
- 给一个变量分配下标,然后接下来的会根据这个下标递增
1 | enum Level |
一般来说,enum
会配合switch
使用
1 | enum Level myLevel = MEDIUM; |
&
引用
1 | int a = 1; |
这个时候,a
和b
共用一个地址,改变一个会影响另一个的数值,因为本质上是一样的,可以理解为别名
1 | b = 2; |
值得一提的是,虽然三种写法int& a
、int &a
和int & a
是等价的,但一般来说工程项目会使用第一个
注意
int& a, b
中,只有a
是引用,b
还是普通的int
变量,因为&
只绑定到当前变量!
取地址
如题,就是取地址符号
在C++中,当一个变量被声明,会分配给其一个内存地址,&
就可以取这个变量的地址,是十六进制格式
1 | int a = 1; |
*
指针
指针是存储内存地址的变量
1 | int a = 1; |
和&
一样,声明指针也推荐用int* a
,而不是int *a
或int * a
,并且指针的变量类型也要跟原变量相同
解引用
前面我们用指针变量存储了另一个变量的地址,我们也可以继续用*
得到这个地址的变量的值,称为解引用
1 | int a = 1; |
修改指针的值
1 | int a = 1; |
内存管理
new
new
可以分配一个新的内存地址
1 | int* a = new int; |
delete
delete
可以释放这个内存地址
1 | int* a = new int; |
注意
delete
只能用于释放被new
声明的内存,否则会出现segmentation fault
下面这个操作是错的,因为a++
改变了指针a
的指向,它不再指向之前被new
的那个内存地址,而且新的内存地址不能被delete
,因为你没有“合法”地拥有它
1 | int* a = new int; |