---
slug: variable
lesson: 7
chapter: 2
chapterTitle: 变量
title: 什么是变量？名字、值、类型三要素一次讲清
description: 变量是三要素的组合：类型决定能装什么，名字用来找到它，值可以被反复读取和修改。本课用一个可在线运行的示例演示定义、输出、改值，并在变量监视区里看到值从 90 变成 95。
code: |
  #include <iostream>
  using namespace std;

  int main() {
      int score = 90;
      cout << score << endl;
      score = 95;
      cout << score << endl;
      return 0;
  }
faq:
  - q: 变量是什么？
    a: 变量是一块有名字的存储空间，由类型、名字、值三要素组成。类型决定能装什么值，名字用来访问它，值可以随时修改。
  - q: int score = 90 是什么意思？
    a: 定义一个变量：类型是 int（整数），名字是 score，初始值是 90。这叫定义并初始化，之后用 score 这个名字就能读写这个值。
  - q: 变量一定要先赋值再使用吗？
    a: 是。只写 int score; 不给初值，score 里是一个不确定的随机值，直接使用是初学者高频错误。定义时顺手给个初值是好习惯。
  - q: 等号是"等于"的意思吗？
    a: 不是。= 是赋值：把右边的值放进左边的变量。score = 95 读作"把 95 赋给 score"，不是判断相等。判断相等用 ==，运算符章会讲。
---

<div class="answer">
变量由三个要素组成：类型决定能装什么（int 装整数），名字用来找到它（score），
值可以被反复读取和修改（90 可以改成 95）。定义变量的写法：类型 名字 = 初值。
</div>

## 三要素

字面量没有名字，用完就消失了。程序需要一个能反复使用、还能修改的值时，就要定义变量：

```cpp
int score = 90;
```

这一行做了三件事：**int** 是类型，规定这个变量只能装整数；**score** 是名字，之后凭它访问这个值；**= 90** 是初始值，定义时先装入 90。

可以把变量理解为一份成绩记录：类型是科目的计分方式（整数分），名字是科目名，值是当前得分——得分可以改，科目名不变。

## 读取与修改

```cpp
int score = 90;
cout << score << endl;   // 读取：输出 90
score = 95;              // 修改：把 95 赋给 score
cout << score << endl;   // 再读：输出 95
```

用名字读值时，score 出现在 `<<` 右边即可；改值时，`=` 右边的新值覆盖旧值。注意 `=` 是赋值不是"等于"——方向从右往左。

## 可视化观察

在 CppStudio 中打开本课示例，点击播放：

1. 执行 `int score = 90;` 时，**变量监视区出现一行 score，值为 90**——这是监视区在本系列中第一次有内容；
2. 执行第一条 cout，输出区出现 `90`；
3. 执行 `score = 95;`，监视区里 score 的值从 90 变为 95；
4. 执行第二条 cout，输出区出现 `95`。

监视区的每一次变化都与代码行一一对应——这就是"程序一步一步走"的直接证据。

## 常见错误

- **不赋初值就用**：`int score; cout << score;` 输出的是一个随机垃圾值，定义时务必给初值；
- **类型不匹配**：`int score = 90.5;` 会丢掉小数部分变成 90，int 装不了小数（小数类型见第 9 课）；
- **把 = 当等于**：`score = 95` 是改值不是比较，判断相等是另一个符号 `==`。

下一课：整型 int——整数在程序里怎么存、怎么算。
