🔷 第二章 C++语言基础
📄 一句话概括

变量就是内存里一块"带标签的空间",里面的值可以改。它有三个要素:类型(这个空间多大、能装什么样的数)、名字(标签,以后靠它找到这块空间)、值(现在装的内容)。常量是"刻在石头上",变量是"写在白板上"——程序真正干活,靠的全是变量:用户的输入、计算的结果、临时记的账,都要先找块地方存起来。

一、变量到底是什么

int age = 18;

这一行做三件事:

① 在内存里要一块 4 字节的空间   ← 由类型 int 决定
② 给这块空间贴个标签 age        ← 这个名字以后代表这块空间
③ 往里面放一个 18               ← 当前的值

内存的比喻:

概念 储物柜的类比
内存 一整排柜子
变量 租下的某一个柜子
类型 柜子的规格(小格/大格;装数字的还是装字符的)
名字 柜门上的编号标签
值 柜子里现在装的东西
常量 焊死的、不让换的柜子

为什么要用变量:程序要处理"会变的数据"。你让用户输入一个数,这个数是多少事先不知道,必须先准备一块地方接着——那块地方就是变量。

二、三要素各由什么决定

要素 由什么决定 例子 讲在哪一节
类型 你写的时候指定 int double char bool 2.3.3~2.3.5、2.4
名字 你自己起(有命名规则) age totalPrice 2.3.1 标识符
值 声明时给或以后赋值 = 18 2.3.2 声明与赋值

三者缺一不可:没有类型,编译器不知道要留多大地方;没有名字,你以后找不回这块地方;没有值,里面是"没扫干净的垃圾"(2.3.2 会讲这个坑)。

三、变量和常量的关系

int age = 18;              // 变量:18 可以改成 19
const int MAX = 100;       // 常量:100 不许改(2.2.5)

唯一的分界线就是"许不许改"。所以:

一条实战经验:写代码时,先想"这个值会不会变"。会变 → 变量;不会变 → 常量。把不该变的写成变量,是 bug 的温床。

四、动手 Demo:第一个"会变"的程序

新建 var.cpp:

#include <iostream>
using namespace std;

int main() {
    int age = 18;                       // 声明 + 初始化
    cout << "今年 " << age << " 岁" << endl;

    age = age + 1;                      // 把里面的值拿出来加 1,再放回去
    cout << "明年 " << age << " 岁" << endl;

    int a = 3, b = 4;                   // 一次声明多个
    cout << "a + b = " << a + b << endl;

    return 0;
}

看到什么算成功:

今年 18 岁
明年 19 岁
a + b = 7

关键观察:age = age + 1; 这行——等号右边先算,再存回左边。它不是数学方程(数学上 age = age + 1 无解),而是赋值语句:把右边算完的结果,放进左边那个盒子里。这是新手第一个思维转折点。

30 秒实验:把 int a = 3, b = 4; 改成 a = 3, b = 4;(去掉 int,只保留已经存在过的变量赋值),看看能不能过——不能过,因为 a、b 这时还不存在(先声明,后使用)。

五、常见误区

  1. "age = age + 1 是解方程"——不是。C++ 里的 = 是"赋值"(把右边放到左边),不是"相等"。判断相等要用 ==(第 4 章)
  2. "变量不用声明,写个名字就能用"——不行。必须先声明(说明类型和名字),才能使用;否则报 was not declared in this scope
  3. "变量名随便起,反正编译器不看"——编译器确实不挑,但人看。a1、a2、aaa 这种名字,一周后你自己都看不懂
  4. "变量声明了就有值"——不一定。声明不带初始值时,里面是"不确定的垃圾值"(2.3.2 会亲手试)
自测三问(点开对答案) 1. 变量的三要素是什么?——**类型**(多大、装什么)、**名字**(标签)、**值**(现在装的内容)。 2. 变量和常量的核心区别?——**能不能改**:变量可改,常量不可改。 3. `age = age + 1;` 是什么意思?——把 `age` 里的值取出、加 1、再**存回去**;这是赋值语句,不是数学等式。

相关笔记