简要回答:
图表理解: 分类静态局部变量全局变量局部变量生命周期程序运行就存在,知道程序结束程序已启动就创建,知道程序结束销毁进入函数时创建,函数结束就销毁作用域当前函数内部或代码块内程序的任何一个地方都能够访问函数内能够访问初始化行为初始化一次(默认为0),之后的值会保留默认初始化为0不赋值的话不确定(随机值)存储位置数据段或BSS段(非栈),可长期保存数据段或BSS段,可长期保存栈(速度快,但并不持久)适合场景想要在函数中记住之前的值(统计次数、递归深度)整个程序都要共享的数据(配置信息)临时变量(循环中的变量、临时数组)
详细回答:
怎么用?
#include <iostream>
using namespace std;
void counter() {
static int count = 0; // 静态局部变量
count++;
cout << "Static local count: " << count << endl;
}
int main() {
counter(); // 输出: Static local count: 1
counter(); // 输出: Static local count: 2
return 0;
} #include <iostream>
using namespace std;
int globalVar = 100; // 全局变量
void modifyGlobal() {
globalVar += 50;
cout << "Modified global: " << globalVar << endl;
}
int main() {
cout << "Initial global: " << globalVar << endl; // 输出: Initial global: 100
modifyGlobal(); // 输出: Modified global: 150
return 0;
} void calculate() {
int localVar = 5; // 局部变量
localVar *= 2;
cout << "Local variable: " << localVar << endl; // 输出: Local variable: 10
// localVar 在此处销毁
}
int main() {
calculate();
// cout << localVar; // 错误:局部变量不可见
return 0;
}知识扩展:



简要回答:
重点:指针占用独立的内存,需要手动管理内存。不存在指向控制的引用,但是可以有指向空值色指针。
详细回答:
关于const修饰问题: 指针中关于const的修饰问题取决于const的位置:
#include <iostream>
using namespace std;
int main() {
// ====== 初始化对比 ======
int a = 10;
int* ptr; // 指针可以延迟初始化
ptr = &a; // 现在指向a
ptr = nullptr; // 可以设为空指针
int& ref = a; // 引用必须初始化且不能为空
// int& ref2; // 错误:引用必须初始化
// int& ref3 = nullptr; // 错误:不能绑定到空
// ====== 重新绑定对比 ======
int b = 20;
ptr = &b; // 指针可以重新指向b
// &ref = b; // 错误:引用不能重新绑定
// ====== 内存占用对比 ======
cout << "指针大小: " << sizeof(ptr) << " bytes" << endl; // 4或8字节
cout << "引用大小: " << sizeof(ref) << " bytes" << endl; // 显示a的大小
// ====== 操作方式对比 ======
*ptr = 30; // 指针需要解引用
ref = 40; // 引用直接操作
// ====== 安全性对比 ======
if(ptr != nullptr) { // 使用指针需要判空(行29)
cout << *ptr << endl;
}
cout << ref << endl; // 引用无需判空检查(行32)
// ====== 动态内存管理 ======
int* dynPtr = new int(50); // 指针用于动态内存
cout << *dynPtr << endl;
delete dynPtr; // 必须手动释放
// 引用不能用于动态内存管理
// ====== 函数参数传递 ======
auto modifyByPtr = [](int* p) { if(p) *p += 1; };
auto modifyByRef = [](int& r) { r += 1; };
modifyByPtr(&a);
modifyByRef(a);
cout << "a = " << a << endl; // 输出42
//====== const的修饰 ======
// 引用示例
const int ci = 10;
//int& r = ci; // 错误:非const引用不能绑定到const对象
const int& cr = ci; //正确:const引用可以绑定到const对象
//指针示例
int a = 10;
const int* p1 = &a; // p1指向的值是const的
//*p1 = 20; //错误:不能通过p1修改a的值
int* const p2 = &a; // p2本身是const的,不能改变指向
//p2 = &b; //错误:不能改变p2指向的对象
return 0;
}知识扩展: 面试官有可能追问:什么时候应该使用指针?什么时候应该使用引用?请举例说明:
(本篇完)