C++变量声明、作用域与内存管理

C++变量声明、作用域与内存管理要点

在 C++ 中,变量是程序存储和操作数据的基本单元。


1. 变量声明与定义

  • 声明:告诉编译器变量的类型和名称(不分配内存)。
    extern int x; // 声明变量 x,但不分配内存
    
  • 定义:声明变量并分配内存(可同时初始化)。
    int x = 10;    // 定义并初始化变量
    double y;      // 定义变量(默认初始化,值不确定)
    

2. 变量命名规则

  • 由字母、数字、下划线组成,不能以数字开头。
  • 区分大小写(varVar 不同)。
  • 不能使用 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. 动态变量(堆内存)

  • 使用 newdelete 手动管理内存。
    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;
}

注意事项

  1. 避免未初始化变量(尤其是局部变量)。
  2. 全局变量谨慎使用(易引发命名冲突和程序耦合)。
  3. 优先使用 constconstexpr 定义常量。
  4. 动态内存需手动释放,否则会导致内存泄漏(推荐使用智能指针如 std::unique_ptr)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

enyp80

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值