跳到主要内容

C++ 变量

变量是任何编程语言的基础组成部分,C++也不例外。变量可以理解为程序中存储数据的命名容器或内存位置,使我们能够通过名称而不是内存地址来操作数据。

什么是变量?

在C++中,变量是用于存储数据的命名存储位置,其值可以在程序执行期间改变。每个变量都有特定的数据类型,决定了变量可以存储什么样的数据以及占用多少内存空间。

备注

变量就像是一个带标签的盒子,标签是变量名,盒子里存放的是变量值,而盒子的大小和形状则由数据类型决定。

变量声明与初始化

变量声明

在C++中,声明变量的基本语法是:

cpp
数据类型 变量名;

例如:

cpp
int age;       // 声明一个整型变量age
double salary; // 声明一个双精度浮点型变量salary
char grade; // 声明一个字符型变量grade

变量初始化

声明变量后,你可以为其赋一个初始值,这个过程称为初始化:

cpp
数据类型 变量名 = 初始值;

例如:

cpp
int age = 25;          // 声明并初始化整型变量age为25
double salary = 5000.50; // 声明并初始化双精度浮点型变量salary为5000.50
char grade = 'A'; // 声明并初始化字符型变量grade为'A'

C++11引入了统一初始化语法,使用花括号:

cpp
int count{10};      // 使用花括号初始化
double pi{3.14159}; // 使用花括号初始化

多个变量同时声明

你可以在一条语句中声明同一类型的多个变量:

cpp
int x, y, z;       // 声明三个整型变量
int a = 5, b = 10; // 声明并初始化两个整型变量

变量命名规则

在C++中,变量名需要遵循以下规则:

  1. 只能包含字母(A-Z, a-z)、数字(0-9)和下划线(_)
  2. 必须以字母或下划线开头,不能以数字开头
  3. 区分大小写(countCount 是不同的变量)
  4. 不能使用C++关键字作为变量名
  5. 不允许在变量名中包含空格或特殊字符
cpp
// 合法的变量名
int age;
int _count;
double salary2022;

// 非法的变量名
int 2count; // 以数字开头
int my-var; // 包含特殊字符
int class; // 使用关键字
命名建议

虽然合法,但通常不建议变量名以下划线开头,因为这种命名方式通常保留给系统变量或私有成员变量使用。另外,采用有意义的变量名可以提高代码可读性。

C++ 中的主要数据类型

C++提供了多种数据类型,以下是最常用的几种:

基本数据类型

  1. 整型

    • int: 通常是4字节,范围约为-2^31到2^31-1
    • short: 通常是2字节,范围约为-32,768到32,767
    • long: 至少与int一样大
    • long long: 通常是8字节(C++11引入)
  2. 浮点型

    • float: 单精度浮点数,通常是4字节
    • double: 双精度浮点数,通常是8字节
    • long double: 扩展精度浮点数
  3. 字符型

    • char: 存储单个字符,通常是1字节
  4. 布尔型

    • bool: 存储true或false,通常是1字节
  5. 无类型

    • void: 表示没有类型

类型修饰符

可以使用类型修饰符来改变基本类型的范围和属性:

  • signed: 表示可以存储正负数(默认)
  • unsigned: 表示只能存储正数,扩大正数的范围
  • short: 减小数据类型的大小
  • long: 增加数据类型的大小

例如:

cpp
unsigned int count = 5000;    // 只存储正整数
signed char value = -10; // 可以存储负值的字符
long double price = 9999.99; // 高精度浮点数

变量的作用域和生命周期

作用域

变量的作用域定义了它在程序中的可见性和可访问性:

  1. 局部作用域:在函数或代码块内声明的变量
  2. 全局作用域:在所有函数外声明的变量
  3. 命名空间作用域:在命名空间内声明的变量
cpp
#include <iostream>
using namespace std;

int globalVar = 10; // 全局变量

int main() {
int localVar = 20; // 局部变量

{
int blockVar = 30; // 块作用域变量
cout << "Block variable: " << blockVar << endl;
cout << "Local variable: " << localVar << endl;
cout << "Global variable: " << globalVar << endl;
}

// blockVar不可访问
cout << "Local variable: " << localVar << endl;
cout << "Global variable: " << globalVar << endl;

return 0;
}

输出结果:

Block variable: 30
Local variable: 20
Global variable: 10
Local variable: 20
Global variable: 10

生命周期

变量的生命周期指的是它存在的时间段:

  1. 自动存储期:局部变量,进入作用域时创建,离开作用域时销毁
  2. 静态存储期:全局变量和使用static关键字声明的变量,程序开始时创建,程序结束时销毁
  3. 动态存储期:使用newdelete动态分配和释放的内存

常量

常量是在程序执行期间不能改变其值的变量。在C++中,可以使用const关键字声明常量:

cpp
const double PI = 3.14159;
const int MAX_STUDENTS = 100;

// 尝试修改常量会导致编译错误
// PI = 3.14; // 错误!

变量类型转换

C++中的类型转换有两种形式:隐式转换和显式转换。

隐式转换

编译器自动执行的类型转换:

cpp
int intValue = 10;
double doubleValue = intValue; // int隐式转换为double

显式转换(强制类型转换)

程序员明确指定的类型转换:

cpp
double doubleValue = 10.5;
int intValue = (int)doubleValue; // C风格的强制类型转换
// 或者
int intValue2 = static_cast<int>(doubleValue); // C++风格的强制类型转换

实际案例:学生成绩管理

下面是一个简单的程序,展示了变量在实际应用中的使用:

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
// 声明并初始化学生信息变量
string studentName = "张三";
int studentID = 20230001;
char gender = 'M';
bool isRegistered = true;

// 声明并初始化成绩变量
double mathScore = 85.5;
double englishScore = 92.0;
double scienceScore = 78.5;

// 计算平均分
double averageScore = (mathScore + englishScore + scienceScore) / 3;

// 确定成绩等级
char grade;

if (averageScore >= 90) {
grade = 'A';
} else if (averageScore >= 80) {
grade = 'B';
} else if (averageScore >= 70) {
grade = 'C';
} else if (averageScore >= 60) {
grade = 'D';
} else {
grade = 'F';
}

// 显示学生信息和成绩
cout << "======= 学生成绩单 =======" << endl;
cout << "姓名: " << studentName << endl;
cout << "学号: " << studentID << endl;
cout << "性别: " << gender << endl;
cout << "注册状态: " << (isRegistered ? "已注册" : "未注册") << endl;
cout << "-------------------------" << endl;
cout << "数学: " << mathScore << endl;
cout << "英语: " << englishScore << endl;
cout << "科学: " << scienceScore << endl;
cout << "-------------------------" << endl;
cout << "平均分: " << averageScore << endl;
cout << "等级: " << grade << endl;
cout << "=========================" << endl;

return 0;
}

输出结果:

======= 学生成绩单 =======
姓名: 张三
学号: 20230001
性别: M
注册状态: 已注册
-------------------------
数学: 85.5
英语: 92
科学: 78.5
-------------------------
平均分: 85.3333
等级: B
=========================

总结

在本节中,我们学习了C++变量的基础知识,包括:

  • 变量的定义和声明
  • 变量的初始化方法
  • 变量命名规则和最佳实践
  • C++中的主要数据类型
  • 变量的作用域和生命周期
  • 常量的使用
  • 变量类型转换
  • 变量在实际应用中的使用

理解变量是学习C++编程的关键一步,它是构建更复杂程序的基础。变量允许我们存储、访问和操作数据,这是编程的核心功能之一。

练习

  1. 声明并初始化一个整型变量、一个浮点型变量、一个字符型变量和一个布尔型变量。
  2. 编写一个程序,计算并显示一个矩形的面积和周长。
  3. 编写一个程序,将摄氏温度转换为华氏温度(公式:F = C * 9/5 + 32)。
  4. 创建一个简单的计算器程序,可以执行两个数的加、减、乘、除运算。
  5. 编写一个程序,使用不同类型的变量来存储个人信息(如姓名、年龄、身高、体重等),并以格式化的方式显示这些信息。
警告

在设计变量时,始终选择最合适的数据类型来存储你的数据。这不仅有助于内存的高效使用,还能防止因类型不匹配导致的错误。

进一步学习资源

想要深入学习C++变量,可以参考以下资源:

  • C++官方文档中关于数据类型的部分
  • 《C++ Primer》第2章:变量和基本类型
  • 《C++程序设计原理与实践》第3章:对象、类型和值
  • 在线编程平台如LeetCode、HackerRank上的C++基础练习题

掌握变量是编程的第一步,通过持续练习和应用,你将能够更加熟练地使用C++变量来解决各种问题。