---
slug: multi-define
lesson: 11
chapter: 2
chapterTitle: 变量
title: 一次定义多个变量：连续定义的写法与陷阱
description: 同类型变量可以一次定义多个：int a = 1, b = 2, c; 逗号分隔、分别初始化。注意只写 int a, b; 不赋初值会留下随机值。本课用可在线运行的示例演示多个变量在监视区同屏变化。
code: |
  #include <iostream>
  using namespace std;

  int main() {
      int a = 1, b = 2, c = 3;
      int sum = a + b + c;
      cout << sum << endl;
      double x = 1.5, y = 2.5;
      cout << x + y << endl;
      return 0;
  }
faq:
  - q: C++ 可以一次定义多个变量吗？
    a: 可以，同类型变量用逗号分隔：int a = 1, b = 2;。每个名字后面都可以单独写初始值，没有写初值的变量里是随机值。
  - q: int a = 1, b; 中 b 的值是多少？
    a: 不确定，是一个随机残留值。连续定义时没写初值的变量不会自动变成 0，使用前必须先赋值。
  - q: 一次定义多个变量和分开写有区别吗？
    a: 效果完全一样，只是书写紧凑。初学者建议每个变量都给初值；不相关的变量分开定义更清晰。
---

<div class="answer">
同类型变量可以一次定义多个：int a = 1, b = 2, c = 3; 用逗号分隔，各自带初值。
没写初值的变量里是随机值，不会自动为 0。效果与分开定义完全相同。
</div>

## 连续定义的写法

```cpp
int a = 1, b = 2, c = 3;
```

类型写一次，后面用逗号列出多个名字，每个名字可以**各自带初始值**。这行代码等价于分开写三行 `int a = 1; int b = 2; int c = 3;`，效果没有区别。

## 最容易踩的坑

```cpp
int a = 1, b;
cout << b << endl;   // 输出随机值，不是 0
```

连续定义里，**没写初值的变量不会被自动设为 0**——b 里是一个残留的垃圾值。这与"只定义一个变量不赋初值"是同一条规则的延伸：定义即初始化，每个名字都要管到。

## 可读性建议

连续定义适合**同一组概念**的变量，比如坐标 `double x = 1.5, y = 2.5;`。不相关的变量（一个装成绩、一个装姓名长度）分开定义更清楚。类型不同的变量不能合并，`int a, double b;` 是非法写法。

## 可视化观察

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

1. 执行第一条定义，监视区**一次性出现 a、b、c 三行**，值分别为 1、2、3；
2. 执行 sum 的定义，监视区出现 sum，值为 6——对照 a、b、c 心算验证；
3. 执行 double 的连续定义，监视区新增 x、y，类型与 int 行区分显示。

多个变量同屏增减，是监视区从这一课开始的常态。

## 常见错误

- **漏给初值**：`int a = 1, b;` 之后直接用 b，得到随机值；
- **跨类型合并**：`int a, double b;` 非法，一条定义语句只能有一种类型；
- **误以为初值共享**：`int a = b = 3;` 不是"分别赋 3"的清晰写法，容易误读，连续定义时请给每个名字单独写初值。

下一课：long long 与取值范围——int 装不下时怎么办，顺便看一眼溢出的实况。
