一、宏替换命令
1、用预处理指令交换两个参数的值
#define SWAP(a,b) (a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b)
2、输入两个参数,输出一个较小的
#define MIN(A,B) ((A)<(B)?(A):(B))
3、表明一年有多少秒
#define SECOND_PER_YEAR (60*60*24*365)UL
//加UL(无符号长整型)为了防止溢出
二、关键字static的作用
1、修饰局部变量时,延长了局部变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束,但是作用域不变,仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
2、修饰全局变量时,限制了全局变量的作用域,这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
3、修饰函数时,限制了函数的作用域,该函数只能在本文件内被调用或访问,不能跨文件访问,其他文件中可以定义同名的函数,不会发生冲突。
三、关键字const的作用
1、可以定义const常量,具有不可变性。
2、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
3、节省时间和提高效率,编译器通常不为普通的const常量分配空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率很高。
4、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
四、关键字volatile的含义
一个定义为volatile的变量是说这变量可能会被意想不到的改变,因此,编译器就不会去假设这个变量的值了。精确的说就是,优化器在利用这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。比如:并行设备硬件寄存器,多线程应用中被几个任务共享的变量。
五、指针和引用的区别
引用是在C++中引入的,他们之间的区别有:
1、非空区别:指针可以为空,而引用不能为空。
2、可修改区别:如果指针不是常指针,那么就可以修改它的指向,而引用不能。
3、初始化区别:指针定义时可以不初始化,而引用定义时必须初始化。
六、结构体struct和类class的区别
在C语言中的struct只能对数据进行聚合,而C++中的class把数据以及对数据处理的方法同时聚合为一体,增加了内聚性。此外,class拥有可再生和可抽象性,实现了代码的复用,集中体现在派生的功能和多态的功能。同时class也比struct具备更好的封装性,体现在三种访问权限上。在C++中的struct和class的结构基本一致,只是struct的默认权限为public,而class的默认权限为private。