跳转到内容

C++ 变量

来自代码酷

C++变量[编辑 | 编辑源代码]

变量是C++程序中最基础的数据存储单元,用于在内存中保存程序运行期间可能变化的值。每个变量都有特定的数据类型名称,编译器根据数据类型分配相应大小的内存空间。

变量声明与定义[编辑 | 编辑源代码]

基本语法[编辑 | 编辑源代码]

C++变量声明/定义的标准格式:

数据类型 变量名;       // 声明
数据类型 变量名 = ;  // 声明并初始化

示例[编辑 | 编辑源代码]

int age;             // 声明整型变量
double price = 19.99; // 声明并初始化双精度浮点变量
char grade = 'A';    // 声明并初始化字符变量

变量命名规则[编辑 | 编辑源代码]

  • 只能包含字母、数字和下划线(_)
  • 必须以字母或下划线开头
  • 区分大小写(`myVar`与`myvar`不同)
  • 不能使用C++关键字(如`int`, `return`等)
  • 建议使用驼峰命名法(如`studentName`)或下划线命名法(如`student_name`)

变量类型[编辑 | 编辑源代码]

C++是强类型语言,主要变量类型包括:

基本类型[编辑 | 编辑源代码]

pie title 基本数据类型分类 "整型" : 45 "浮点型" : 30 "字符型" : 15 "布尔型" : 10

基本数据类型表
类型 关键字 大小(字节) 范围
int | 4 | -2,147,483,648 到 2,147,483,647
short | 2 | -32,768 到 32,767
long | 4/8 | 平台相关
float | 4 | 约±3.4e±38 (7位有效数字)
double | 8 | 约±1.7e±308 (15位有效数字)
char | 1 | -128 到 127 或 0 到 255
bool | 1 | true/false

类型修饰符[编辑 | 编辑源代码]

可改变基本类型的含义:

  • `signed` - 有符号(默认)
  • `unsigned` - 无符号(仅非负数)
  • `short` - 短型
  • `long` - 长型

示例:

unsigned int positiveOnly = 42;
long double bigPrecision = 3.141592653589793238L;

变量作用域[编辑 | 编辑源代码]

变量在程序中的可见范围:

局部变量[编辑 | 编辑源代码]

在函数或代码块内部声明,仅在其内部可见:

void myFunction() {
    int localVar = 10;  // 局部变量
    cout << localVar;
}
// cout << localVar;  // 错误!此处不可见

全局变量[编辑 | 编辑源代码]

在所有函数外部声明,整个程序可见:

int globalVar = 100;  // 全局变量

void func1() { cout << globalVar; }
void func2() { cout << globalVar; }

常量变量[编辑 | 编辑源代码]

使用`const`关键字声明不可修改的变量:

const double PI = 3.14159;
// PI = 3.14;  // 编译错误!常量不可修改

变量初始化[编辑 | 编辑源代码]

C++支持多种初始化方式:

int a = 10;     // C风格初始化
int b(20);      // 构造函数初始化
int c{30};      // 列表初始化(C++11)
int d = {40};   // 带等号的列表初始化

实际应用案例[编辑 | 编辑源代码]

游戏开发示例[编辑 | 编辑源代码]

#include <iostream>
using namespace std;

int main() {
    // 玩家属性
    string playerName = "Hero";
    int health = 100;
    float attackPower = 15.5f;
    bool isAlive = true;

    // 战斗计算
    float damage = attackPower * 2.3f;
    health -= static_cast<int>(damage);

    cout << playerName << " received " << damage << " damage!\n";
    cout << "Remaining health: " << health << endl;
    
    return 0;
}

输出:

Hero received 35.65 damage!
Remaining health: 64

科学计算示例[编辑 | 编辑源代码]

计算圆的面积和周长:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    const double PI = 3.141592653589793;
    double radius = 5.0;
    
    double area = PI * pow(radius, 2);
    double circumference = 2 * PI * radius;
    
    cout << "Radius: " << radius << endl;
    cout << "Area: " << area << endl;
    cout << "Circumference: " << circumference << endl;
    
    return 0;
}

输出:

Radius: 5
Area: 78.5398
Circumference: 31.4159

最佳实践[编辑 | 编辑源代码]

1. 始终初始化变量:未初始化的变量包含垃圾值 2. 使用有意义的名称:如`studentCount`而非`s` 3. 限制全局变量使用:避免命名冲突 4. 合理选择数据类型:如年龄用`unsigned short`而非`double` 5. C++11后优先使用列表初始化:防止窄化转换

常见错误[编辑 | 编辑源代码]

  • 未初始化变量:导致不可预测的行为
  int x;
  cout << x;  // 危险!x的值不确定
  • 作用域错误:在作用域外访问变量
  {
      int y = 10;
  }
  cout << y;  // 错误!y已超出作用域
  • 类型不匹配
  int z = 3.14;  // 隐式转换,z值为3(丢失精度)

进阶概念[编辑 | 编辑源代码]

类型推断(C++11)[编辑 | 编辑源代码]

使用`auto`关键字让编译器推断变量类型:

auto num = 42;      // int
auto pi = 3.14159;  // double

静态变量[编辑 | 编辑源代码]

生命周期贯穿整个程序执行期:

void counter() {
    static int count = 0;  // 只初始化一次
    count++;
    cout << count << endl;
}

变量存储类别[编辑 | 编辑源代码]

  • `auto`(默认)- 自动存储期
  • `register` - 建议寄存器存储(C++17弃用)
  • `static` - 静态存储期
  • `extern` - 外部链接

数学表示[编辑 | 编辑源代码]

变量可以看作内存地址到值的映射: v:addressvalue

在计算机中,变量名是内存位置的符号表示: 变量名符号表内存地址存储的值