在 C++ 中,变量是程序存储和操作数据的基本单元。
1. 变量声明与定义
- 声明:告诉编译器变量的类型和名称(不分配内存)。
extern int x; // 声明变量 x,但不分配内存 - 定义:声明变量并分配内存(可同时初始化)。
int x = 10; // 定义并初始化变量 double y; // 定义变量(默认初始化,值不确定)
2. 变量命名规则
- 由字母、数字、下划线组成,不能以数字开头。
- 区分大小写(
var和Var不同)。 - 不能使用 C++ 关键字(如
int,class等)。
3. 变量作用域
- 局部变量:在函数或代码块内部声明,仅在其作用域内有效。
void func() { int localVar = 5; // 局部变量 } - 全局变量:在函数外声明,整个文件内有效。
int globalVar = 100; // 全局变量 - 静态变量:用
static修饰,生命周期持续到程序结束,但作用域受限。void func() { static int count = 0; // 只初始化一次,函数退出后值保留 count++; }
4. 常量
const:不可修改的常量(编译时常量或运行时常量)。const int MAX_SIZE = 100;constexpr(C++11):必须在编译时可求值的常量。constexpr int ARRAY_SIZE = 10; int arr[ARRAY_SIZE]; // 合法
5. 变量初始化
- 默认初始化:未显式初始化时,全局变量初始化为 0,局部变量值不确定。
- 直接初始化:
int x(10); - 列表初始化(C++11):使用
{},避免隐式类型转换。int x{5}; // 正确 int y{}; // 初始化为 0 int z = {3.14}; // 错误:narrowing conversion(丢失精度)
6. 左值 (lvalue) 与右值 (rvalue)
- 左值:有持久内存地址的变量(可出现在赋值左侧)。
int a = 5; // a 是左值 - 右值:临时值(如字面量、表达式结果),无持久内存地址。
int b = a + 3; // (a + 3) 是右值
7. 动态变量(堆内存)
- 使用
new和delete手动管理内存。int* ptr = new int(10); // 动态分配 delete ptr; // 释放内存
示例代码
#include <iostream>
int global_var = 50; // 全局变量
int main() {
int local_var = 20; // 局部变量
const double PI = 3.14159; // 常量
static int static_var = 0; // 静态变量
int* dynamic_var = new int(100); // 动态变量
std::cout << "Global: " << global_var << std::endl;
std::cout << "Local: " << local_var << std::endl;
std::cout << "PI: " << PI << std::endl;
std::cout << "Dynamic: " << *dynamic_var << std::endl;
delete dynamic_var; // 释放内存
return 0;
}
注意事项
- 避免未初始化变量(尤其是局部变量)。
- 全局变量谨慎使用(易引发命名冲突和程序耦合)。
- 优先使用
const或constexpr定义常量。 - 动态内存需手动释放,否则会导致内存泄漏(推荐使用智能指针如
std::unique_ptr)。
C++变量声明、作用域与内存管理要点
362

被折叠的 条评论
为什么被折叠?



