笔试形式为50分钟50道题,其中30道选择,20道判断。包括C,python和算法题。
涉及到不熟悉或有所遗忘的知识点如下:
函数指针
C++ 函数指针 & 类成员函数指针
函数存放在内存的代码区域内,它们同样有地址.如果我们有一个 int test(int a) 的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。
函数指针的定义方式
data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);
int (*fp)(int a);
// 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。
注意:函数指针所指向的函数一定要保持函数的返回值类型,函数参数个数,类型一致。
运算符优先级
enum
使用 enum 工具不仅能够创建符号常量,还能定义新的数据类型。
枚举量的声明和定义
(1) 首先,请看下面的语句:
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
- 第一:声明 enumType 为新的数据类型,称为枚举(enumeration);
- 第二:声明 Monday、Tuesday 等为符号常量,通常称之为枚举量,其值默认分别为 0-6。
(2) 接着利用新的枚举类型 enumType 声明这种类型的变量:enumType Weekday 就像使用基本变量类型int声明变量一样,如 int a; 也可以在定义枚举类型时定义枚举变量
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}Weekday;
- 在不进行强制转换的前提下,只能将定义的枚举量赋值给该种枚举的变量,也就是说 Weekday 只能是定义的 Monday-Sunday 这些定义过的枚举量。
- 而不能将非枚举量赋给枚举变量,如:Weekday = 10; 是不允许的
(3) 允许将枚举量赋给非枚举变量。如:int a=Monday; 因为枚举量是符号常量,这里的赋值编译器会自动把枚举量转换为int类型。
(4) 可以对枚举量进行赋值运算,但不能进行算术运算,因为这些操作可能导致违反类型限制。
(5) 枚举量能参与其他类型变量的运算,因为编译器会自动把枚举量转换为 int 类型。
(6) 可以通过强制转换将其他类型值赋给枚举变量。但是,如果试图将一个超出枚举取值范围的值通过强制转换赋给枚举变量,结果将是不确定的,这么做不会出错,但得不到想要的结果。
自定义枚举量的值
(1) 我们可以显式的设置枚举量的值,指定的值必须是整数。
enum enumType {Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7};
(2) 也可以只显式的定义一部分枚举量的值:
enum enumType {Monday=1, Tuesday, Wednesday=1, Thursday, Friday, Saturday, Sunday};
- 这样 Monday、Wednesday 均被定义为 1,则 Tuesday=2,Thursday、Friday、Saturday、Sunday 的值默认分别为 2、3、4、5。
总结:未被初始化的枚举值的值默认将比其前面的枚举值大1。
(3) 第二条还说明另外一个现象,就是枚举量的值可以相同。
枚举的取值范围
- 枚举的上限是 大于最大枚举量的 最小的 2 的幂,减去 1;
- 枚举的下限有两种情况:
- 一、枚举量的最小值不小于 0,则枚举下限取 0;
- 二、枚举量的最小值小于 0,则枚举下限是小于最小枚举量的最大的 2 的幂,加上 1。
假如定义 enum enumType1 { First=-5,Second=14,Third=10 }; 则枚举的上限是 16-1=15(16大于最大枚举量14,且为2的幂),枚举的下限是-8+1=-7(-8小于最小枚举量-5,且为2的幂);
C++语法细节
this指针
- 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。
- this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
- this只能在非静态成员函数中使用。全局函数、静态函数、友元函数都不能使用this.
二维数组
- C++ 二维数组详解
- C/C++定义二维数组(矩阵)
- 定义二维数组维度需要确定为长度
- 初始化不可以忽略每个一维矩阵的维度,即列数。系统不能从初始化结构读取列数,而行数可以根据初始化确定,所以可以忽略不写。
int a[2][2] = {{1,2},{3,4}};//最正常的初始化,谨记多维数组是数组的数组
int a[2][2] = {1,2,3,4};//与上等价,但这样看起来不是很方便
int a[2][2] = {{1},{2}};//只初始化每一行的第一个元素,其它执行默认初始化
int a[2][2] = {1,2,3};//逐个放进去
int a[][3] = { 1, 2, 3, 4, 5, 6 } ; // 系统根据初始化元素的个数和第二维的长度来确定第一维的长度。
switch()
一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。
switch 语句必须遵循下面的规则:
- switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
- 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
- case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。