C++ 变量
外观
C++变量[编辑 | 编辑源代码]
变量是C++程序中最基础的数据存储单元,用于在内存中保存程序运行期间可能变化的值。每个变量都有特定的数据类型、名称和值,编译器根据数据类型分配相应大小的内存空间。
变量声明与定义[编辑 | 编辑源代码]
基本语法[编辑 | 编辑源代码]
C++变量声明/定义的标准格式:
数据类型 变量名; // 声明
数据类型 变量名 = 值; // 声明并初始化
示例[编辑 | 编辑源代码]
int age; // 声明整型变量
double price = 19.99; // 声明并初始化双精度浮点变量
char grade = 'A'; // 声明并初始化字符变量
变量命名规则[编辑 | 编辑源代码]
- 只能包含字母、数字和下划线(_)
- 必须以字母或下划线开头
- 区分大小写(`myVar`与`myvar`不同)
- 不能使用C++关键字(如`int`, `return`等)
- 建议使用驼峰命名法(如`studentName`)或下划线命名法(如`student_name`)
变量类型[编辑 | 编辑源代码]
C++是强类型语言,主要变量类型包括:
基本类型[编辑 | 编辑源代码]
类型 | 关键字 | 大小(字节) | 范围 |
---|---|---|---|
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` - 外部链接
数学表示[编辑 | 编辑源代码]
变量可以看作内存地址到值的映射:
在计算机中,变量名是内存位置的符号表示: