寒假学习笔记(1)
2018.2.7
常变量 const
- const 数据类型 常变量名=初始值;
- 使用const关键字指定常变量;
- 定义时必须初始化;
- 不能再次被赋值;
- 用const定义与用define定义的区别:
区别1
define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
const定义的常量,在程序运行时在常量表中,系统为它分配内存。
区别2
define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。
const定义的常量,在编译时进行严格的类型检验,可以避免出错。
区别3
define定义表达式时要注意“边缘效应”,例如如下定义:
#define N 2+3
//我们预想的N值是5,我们这样使用N
int a = N/2; //我们预想的a的值是2.5,可实际上a的值是3.5
原因在于在预处理阶段,编译器将a = N/2
处理成了a = 2+3/2
;这就是宏定义的字符串替换的“边缘效应”因此要如下定义
#define N (2+3)
const定义表达式没有上述问题
const定义的常量叫做常变量原因有二:
1,const定义常量像变量一样检查类型。
2,const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同(常量在静态区,变量在栈区)。
引用
- 引用类型&引用变量名=被引用变量;
- 被引用变量必须是一个已经定义的变量;
- 引用变量和被引用变量共用内存;
- 引用传递(1):引用传递将被调函数的形参定义成主调函数中实参变量的引用,被调函数通过该引用间接访问主调函数中的变量;
- 引用传递(2):实际上修改的是实参,也就是说这是一种双向数据传递机制。不同于值传递的单向性;
特殊函数
-
带默认形参值的函数;
- 带默认值的形参必须定义在形参列表的后面;
-
重载函数;
- 如果两个函数的形参个数不同,或数据类型不同,那么这两个函数就可以重名,称为重载函数。 -
内联函数(inline);
- 编译源代码时将函数代码直接嵌入到每一个调用语句处,而在执行时不再进行函数跳转和数据传递。
- 只能是简单函数,复杂函数会以非内联形式出现。