1-3 对象与变量介绍

数据与值

第1.1课——语句与程序结构中,你了解到程序中的大多数指令是语句,而函数则是按顺序执行的语句集合。函数内部的语句执行操作,这些操作(理想情况下)会产生程序设计时预期的结果。

那么程序如何实际产生结果?其原理在于对数据进行操作(读取、修改和写入)。在计算机领域,数据data指任何可被计算机移动、处理或存储的信息。

关键洞见:
程序是由指令组成的集合,通过操作数据来产生预期结果。

计算机程序(无论是源代码形式还是编译后的形式)从技术上讲也是数据,因为它们可以被移动、处理和存储。然而,在计算机程序的语境中,我们通常用“代码”指代程序本身,用“数据”指代程序为产生结果而处理的信息。

程序获取数据的方式多种多样:可从文件或数据库中读取,通过网络获取,接收用户键盘输入,或由程序员直接将数据写入程序源代码。在前文“Hello world”示例程序中,文本“Hello world!”被直接嵌入源代码,为程序提供了可用的数据。程序随后通过将数据发送至显示器进行处理以实现输出。

在编程中,单个数据单元称为value(有时也称数据值data value)。常见的值类型包括:

  • 数字(如5或-6.7)。
  • 字符,需用单引号括起(如'H'或'$')。仅允许使用单个符号。
  • 文本,必须用双引号括起(如“”Hello“‘或’”H“”)。文本可包含零个或多个字符。

关键要点:
用单引号包裹的值会被编译器解释为字符值。
用双引号包裹的值会被编译器解释为文本值。
数值无需加引号。

直接写入源代码的值称为字面量literals。我们在第5.2节——字面量中详细介绍了字面量。

对值最常见的操作之一是将其打印到屏幕上。例如:

#include <iostream> // for std::cout

int main()
{
    std::cout << 5;       // print the literal number `5`
    std::cout << -6.7;    // print the literal number `-6.7`
    std::cout << 'H';     // print the literal character `H`
    std::cout << "Hello"; // print the literal text `Hello`

    return 0;
}

如果字符值或文本值未正确加引号,编译器会尝试将其解释为C++代码。这几乎总会导致编译错误。

常量是为程序提供值的最简单方式,但存在某些局限性。常量属于只读值,其值无法被修改。因此,若需将数据存储在内存中,我们需要采用其他方法实现。


随机存取存储器

计算机的主存储器称为随机存取存储器Random Access Memory(通常简称为RAMRAM)。当我们运行程序时,操作系统会将程序加载到RAM中。任何硬编码在程序本身中的数据(例如文本“Hello, world!”)都会在此阶段加载。

操作系统还会为程序运行预留额外的RAM空间。这类内存通常用于存储用户输入的值、从文件或网络读取的数据,以及程序运行过程中计算出的临时结果(如两个数值的和),以便后续调用。

可将RAM视为一组编号存储单元,用于在程序运行期间存储数据。

在某些早期编程语言(如Applesoft BASIC)中,可直接访问这些存储单元(例如编写语句“获取存储在编号7532存储单元中的值”)。


对象与变量

在C++中,不鼓励直接访问内存。相反,我们通过对象间接访问内存。对象object代表一个存储区域(通常是RAM或CPU寄存器),能够保存数值。对象还具有关联属性(我们将在后续课程中讲解)。

编译器和操作系统如何为对象分配内存超出了本课的讨论范围。但关键在于:我们无需指定“从7532号邮箱获取值”,只需说“获取此对象存储的值”,编译器自会确定取值位置与方式。这意味着我们可以专注于用对象存储和检索值,无需关心对象在内存中的实际位置。

尽管C++中的对象可以是无名的(匿名),但我们通常会使用标识符为对象命名。具有名称的对象称为变量variable

关键要点:
对象用于在内存中存储值。变量是具有名称(标识符)的对象。

为对象命名使我们能在程序后续部分再次引用这些对象。

命名法:
在一般编程中,术语“对象”通常指内存中的未命名对象、变量或函数。而在C++中,“对象”的定义更为狭窄,不包含函数。在本教程系列中使用“对象”一词时,我们指的就是这种更狭义的C++定义。


变量定义

要在程序中使用变量,我们需要告知编译器需要创建该变量。最常见的方式是使用一种特殊的声明语句——定义definition(关于声明与定义的区别,我们将在后续章节2.7 向声明与定义 中详细说明)。

关键要点:
定义语句可用于告知编译器,我们在程序中需要使用某个变量。

以下是定义名为 x 的变量的示例:

int x; // define a variable named x (of type int)

编译时compile-time(即程序被编译的过程中),当遇到这条语句时,编译器会记录下我们需要一个名为x的变量,且该变量具有int数据类型(稍后将详细说明数据类型)。此后(除后续课程将讨论的某些限制外),每当我们在代码中使用标识符x时,编译器便会识别这是对该变量的引用。

编译器会自动处理该变量的所有细节,包括:确定对象所需内存大小、存储位置(如RAM或CPU寄存器)、相对于其他对象的存储关系、创建与销毁时机等。

通过定义语句创建的defined变量,其作用域始于定义语句所在的位置。目前建议将变量定义在函数内部(如main()函数中)。

以下是一个包含变量定义语句的完整程序示例:


变量创建

运行时runtime(即程序被加载到内存并执行时),每个对象都会被分配一个实际存储位置(如RAM或CPU寄存器),用于存储值。为对象预留存储空间的过程称为分配allocation。一旦完成分配,对象即被创建并可供使用。

举例说明:假设变量x在内存地址140处实例化。程序每次使用变量x时,都会访问内存地址140处的值。

关键洞察
当为对象实际分配存储空间时,该对象即被“创建”。

运行上述程序时,执行从 main() 函数顶部开始。程序为变量 x 分配内存后即结束。


数据类型

迄今为止,我们已了解对象是能够存储数据值的存储区域(数据的具体存储方式将在后续课程中讲解)。数据类型data type(通常简称为类型type)决定了对象将存储何种类型的值(例如数字、字母、文本等)。

在上例中,变量 x 被赋予类型 int,这意味着变量 x 将存储整数值。整数integer是指无需小数部分即可书写的数字,例如 4、27、0、-2 或 -12。简而言之,我们可以称 x 为整数变量。

在C++中,对象的类型必须在编译时确定,且类型变更需重新编译程序。这意味着整型变量只能存储整数值。若需存储其他类型值,则必须使用不同类型。

关键洞察
对象的数据类型必须在编译时已知(以便编译器了解该对象所需的内存大小)。

整数只是C++开箱即用的众多数据类型之一。为便于说明,下面再举一个使用double数据类型定义变量的示例:

double width; // define a variable named width, of type double

C++还允许你创建自己的自定义类型。这在后续课程中我们将频繁使用,也是C++强大功能的重要组成部分。

在本入门章节中,我们将专注于整数变量,因为它们概念简单易懂,但很快就会探索C++提供的其他多种类型(包括双精度类型)。


定义多个变量

可以在单个语句中通过用逗号分隔名称来定义多个相同类型的变量。以下代码片段:

int a;
int b;

实际上与这个相同:

int a, b;

当以这种方式定义多个变量时,新手程序员常会犯三种常见错误(这些错误都不严重,因为编译器会检测到并要求你修正):

第一种错误是在顺序定义变量时为每个变量指定类型。

int a, int b; // wrong (compiler error)

int a, b; // correct

第二个错误是试图在同一个语句中定义不同类型的变量,这是不允许的。不同类型的变量必须在单独的语句中定义。

int a, double b; // wrong (compiler error)

int a; double b; // correct (but not recommended)

// correct and recommended (easier to read)
int a;
double b;

下节课我们将讨论第三个问题,届时将讲解变量的初始化。

最佳实践
尽管语言允许这样做,但应避免在单个语句中定义多个相同类型的变量。相反,应将每个变量单独定义在独立的语句中(并使用单行注释说明其用途)。


摘要

在C++中,我们通过对象访问内存。命名对象称为变量。每个变量都具有标识符、类型和数值(以及其他在此不涉及的属性)。变量的类型用于确定内存中数值的解释方式。

变量实际上是在运行时创建的,此时会为其分配内存空间。

在下一课中,我们将探讨如何为变量赋值以及如何实际使用它们。


测验时间

问题 #1

什么是数据?

显示答案

数据是指任何能够被计算机传输、处理或存储的信息。

问题 #2

什么是值?

显示答案

值可以是字母(例如 a)、数字(例如 5)、文本(例如 Hello),或是其他可作为数据表示的有用概念的实例。

问题 #3

什么是对象?

显示答案

对象是存储区域(通常是内存),能够存储值。

问题 #4

什么是变量?

显示答案

变量是一个具有名称的对象。

问题 #5

什么是标识符?

显示答案

标识符是访问变量时使用的名称。

问题 #6

数据类型有什么用途?

显示答案

数据类型决定了对象将存储何种类型的值(例如数字、字母、文本等)。

问题 #7

什么是整数?

显示答案

整数是指可以不带小数部分书写的数。
posted @ 2026-02-06 09:24  游翔  阅读(1)  评论(0)    收藏  举报