章节目录

对象与变量

本节阅读量:

数据和值

第1.0节「程序结构介绍」中,了解到程序中大多数指令是语句,函数是按顺序执行的语句组。语句执行生成想要的结果。

程序怎么得到结果呢?通过操纵(读取、更改和写入)数据。「数据」是计算机可移动、处理或存储的信息。

程序有多种方式获取待使用数据:文件或数据库、网络、键盘上输入或程序员直接将数据放入源代码。在上述“Hello world”程序中,文本“Hello world!”直接插入程序源代码,为程序提供数据。程序将数据发送至显示器处理。

数据以有效的处理格式存储(不可读)。编译“Hello World”程序时,文本“Hello World!”转换为程序使用的更有效的格式(二进制,将在以后的课程中讨论)。

「值」是字母(例如A)、数字(例如5)、文本(例如Hello)或其他数据值(例如分数)。


对象和变量

内存,称为RAM(随机存取存储器的缩写),供程序使用。RAM被视为一系列编号的邮箱,每个邮箱在程序运行时保存一段数据。

一些较旧的编程语言(如BASIC),可直接访问这些邮箱(语句类似于「获取邮箱编号7532中的值」)。

在C++中,不鼓励直接访问内存。鼓励对象间接访问内存。对象是存储值的存储区域(通常是内存),具有其他相关属性(将在后续课程中介绍)。编译器和操作系统如何为对象分配内存超出本课程范围。这里的关键点,与其说获取存储在邮箱7532中的值,不如说获取该对象存储的值。这意味着我们可以专注于使用对象来存储和检索值,而不必担心它们在内存中的实际位置。

对象即可有名称也可无名称(匿名)。命名对象称为变量,对象名称为标识符。程序中,创建和使用的大多数对象是变量。


变量实例化

为了创建变量,使用一种特殊的声明语句,称为定义(稍后澄清声明和定义之间的区别)。

下面示例,定义名为x的变量:

1
int x; // 定义一个类型为int的变量x

编译器看到语句时,就会知道,定义一个变量,命名为x,类型为int(稍后将详细介绍类型)。从这行开始(我们将在以后的课程中讨论一些限制),每当编译器看到标识符x时,它就会知道我们正在引用这个变量。

程序运行时,变量被实例化。「实例化」意味着创建对象并为其分配内存地址。变量须先实例化,才能用于存储值。假设变量x在内存位置140处实例化。当程序使用x时,将访问存储器位置140中的值。实例化对象有时称为实例。


数据类型

目前为止,已经讨论了变量是存储数据值的命名存储区域。数据类型(通常称为类型)告诉编译器变量将存储哪种类型的值(例如,数字、字母、文本等)。

上面例子中,变量x赋予了int类型,意味着变量x将表示一个整数值。整数是没有分数的数字,例如4、27、0、-2或-12。简而言之,x是整数变量。

C++中,变量的类型须在编译时(编译程序时)已知,不重新编译程序不能更改类型。整数变量保存整数值。如果要存储其他类型值,则需要使用不同的类型。

整数是C++默认支持类型之一。下面示例使用数据类型double定义变量:

1
double width; // 定义一个类型为double的变量width

C++允许创建自定义类型。后续会介绍,也是C++一部分强大的能力。

对于介绍性章节,将使用整数变量,它们在概念上很简单,后续也会有其他类型(包括double)。


定义多个变量

通过逗号分隔名称,能在单个语句中定义相同类型的多个变量。以下两段效果相同:

1
2
int a;
int b;

内容相同:

1
int a, b;

定义多个变量时,新手程序员会犯两个常见错误(不严重,编译器会捕获这些错误):

第一个错误,按顺序定义变量时为每个变量指定类型。

1
2
3
int a, int b; // 错误 (编译失败)

int a, b; // 正确

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

1
2
3
4
5
6
7
int a, double b; // 错误 (编译失败)

int a; double b; // 正确 (但不推荐)

// 正确并且推荐 (更容易阅读)
int a;
double b;

总结

C++中,使用变量访问内存。变量有一个标识符、一个类型和一个值(以及这里不相关的一些其他属性)。变量的类型用于如何解释内存中的值。

下一课,将学习如何为变量赋值,以及如何实际使用它。


1.1 注释

上一节

1.3 变量初始化和赋值

下一节