Skip to content

C++ 基础语法专题(指针 / const / static / 关键字) ​

一句话总览 ​

基础八股考得「散而碎」,但常被当作过滤题:答得干净利落是加分,卡壳直接败。把每个关键字能同时答「作用 + 反例 + 场景」即可。

问题清单(含答案) ​

1. 指针与引用区别?

答案

指针是变量、存地址,可空/可重指向/可做 +n 运算、本身占内存;引用是别名,必须初始化、不可改绑、sizeof 取的是原对象。底层引用常实现为指针,但语义是"别名"。

2. 野指针 vs 悬空指针;如何避免?

答案

野指针 = 未初始化的指针(指向随机地址);悬空指针 = 指向已被释放内存(delete 后未置空、返回局部变量地址)。避免:定义即初始化 nullptr、释放后置空、用 RAII/智能指针、不返回栈对象地址。

3. 常量指针 vs 指针常量?const 各种位置含义?

答案

const int *p 常量指针(*p 不可改,指向可改);int *const p 指针常量(p 不可改,指向内容可改);const int *const p 两者都不可改。读法:const 在 * 左边修饰指向物,右边修饰指针本身。

4. static 在 函数/变量/类成员 中作用?

答案

局部 static 只初始化一次、生命周期到程序结束;全局/函数 static 限制内部链接(仅本编译单元可见);类 static 成员属于类、所有对象共享;static 成员函数无 this、只能访问静态成员。

5. const / volatile / mutable / extern 各干嘛?

答案

const 只读;volatile 告诉编译器每次从内存读、别优化掉(硬件寄存器/信号变量);mutable 允许 const 成员函数修改该成员(如缓存/锁);extern 声明外部链接的变量/函数。

6. define vs const vs typedef vs inline vs enum?

答案

define 预处理文本替换、无类型无作用域易错;const 有类型有作用域、可调试;typedef C 风格类型别名;using C++11 更现代、支持模板别名;inline 允许头文件定义、内联展开;enum 整型常量集合。

7. sizeof 与 strlen?sizeof(1==1);为什么结构体需要对齐?

答案

sizeof 编译期求值、算占用字节(含对齐、字符串含 '\0');strlen 运行期、算 '\0' 前字符数。sizeof(1==1) = sizeof(bool) = 1。对齐是为了 CPU 按对齐地址一次访存、更快,未对齐可能跨 cache line 或某些平台异常。

8. include " " 与 <> 区别?头文件防重复 include?

答案

"" 先从当前文件目录再搜 -I 路径;<> 只搜系统/标准头路径。防重复:#pragma once(编译器普遍支持、非标准)或 include guard(#ifndef X/#define X/#endif,标准、需唯一宏名)。

9. extern "C" 作用?

答案

让 C++ 用 C 的命名约定(不 mangling)和链接方式处理符号,使 C 函数可被 C++ 调用、C++ 函数可被 C 链接(多用于动态库接口、C/C++ 混合编译)。

10. 左值右值 / 四种 cast?

答案

左值有持久地址可被取址,右值是临时/将亡值。static_cast 编译期常规转换;dynamic_cast 运行期多态安全向下转型(失败返空/抛异常,需 RTTI);const_cast 去/加 const;reinterpret_cast 底层位模式重解释(最危险)。

子文档 ​

文件内容
pointer-ref.md指针引用、野/悬空、常量指针
keywords.mdstatic/const/volatile/extern/mutable
macro-cast.mddefine/const/inline/typedef、四种 cast、sizeof
string-cfuncs.mdmemcpy/memmove/strcpy 缺陷、memcmp 判结构体、安全字符串

糌粑的面经笔记 · VitePress 版