本文原载于我的博客:https://www.seekingmini.top/archives/自己整理的c面试题
0. 写在前面
大三找实习,也算是面试了不少公司了,凭着记忆整理了一些当时被问到的题目以及自己觉得比较常见的问题。
1. const
的作用
(1) 修饰变量
const int a = 3; // a是常量,值不可改变
(2) 修饰指针
- 指向常量的指针
const int a = 3; // a是整型常量
const int *p = &a; // p是指向整型常量的指针
怎么理解指向常量的指针?我们可以这样认为:
int
是一种数据类型,那么const int
也是一种数据类型,那么就会有指向const int
这种类型的指针,即const int*
。
- 自身是常量的指针
int a = 3;
int* const q = &a; // q是一根常量指针(这意味着q只能指向a)
int b = 4;
*p = 4; // 这是合法的,因为p仍然指向a,而我们只是改变a的值而已
p = &b; // 这是不合法的,因为改变了p指向的对象
时刻记住:如果
const
出现在*
左边,表示被指对象是常量;如果出现在*
右边,表示指针自身是常量;如果出现在*
两边,表示被指对象和指针两者都是常量。
(3) 修饰引用
int a = 3;
void func(const int &a);
函数
func
的参数a
前加入const
既可以避免拷贝,又可以防止对a
的修改。
(4) 修饰成员函数
说明该成员函数内不能修改成员变量。
2. static
的作用
(1) 修饰普通变量
修改变量的存储区域和生命周期,使变量存储在静态区,在主函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
(2) 修饰普通函数
表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以用
static
修饰函数。
(3) 修饰成员变量
使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。static修饰的变量先于对象存在,所以static修饰的变量要在类外初始化。
class Person {
private:
int age;
string name;
public:
static int num; // 表示实例化的对象数
Person(int a, string n) {
num++; this->age = a; this->name &#