《C++程序设计教程(第3版)》——第2章,第3节常量和变量

简介:

本节书摘来自华章出版社《C++程序设计教程(第3版)》一书中的第2章,第2.3节常量和变量,作者张志航,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.3 常量和变量
2.3.1 常量
在程序的运行过程中,其值不变的量称为常量。编程者可以直接在程序中书写常量。如在例1.2中有常量3和5。下面对各种类型的常量及其书写形式做详细介绍。
1.整型常量
1)十进制整型常量,如123、-456。
2)八进制整型常量,如0123、-016。
八进制整型常量以0(零)开头,在数值中可以出现数字符号0~7。
3)十六进制整型常量,如0x123、-0xAB。
十六进制整型常量以0x(零x)或0X开头,在数值中可以出现数字符号0~9、A~F(或小写的a~f)。
4)长整型与无符号型整型常量。
长整型常量,如12L、0234L、-0xABL、12l、0234l、-0xABl。
无符号型整型常量,如12U、0234U、0xABU、12u、0234u、0xABu。
在一个整型常量后加后缀L或l(小写的L)表示该常量是长整型常量;在一个整型常量后加U或u(小写的U)表示该常量是无符号型整型常量。
在程序中书写的整型量,只要它的数值范围在int型量的范围内,则它的默认数据类型是int型,而不是char型、short型或long型,如常量439是int型常量。
2.逻辑型常量
逻辑型常量只有两个,即true和false,分别代表逻辑“真”和逻辑“假”。
3.实型常量
实型常量在内存中以浮点形式存放,均为十进制数,无数制区分。两种书写形式如下所示。
1)小数形式:必须写出小数点,如1.65、1.、.123均是合法的实型常量。
2)指数形式:也称为科学表示法形式,如实型常量1.23×105和1.23×10-5在程序中可以书写成1.23e5和1.23e-5。e或E前必须有数字,e或E后必须是整型量。例如,1000应写成1e3,而不能写成e3。
在程序中书写的实型量,它的默认数据类型是double,而不是float,如1.23是double型量。如果想把一个实型常量表示成float型常量,可加后缀F或f,因此1.23e5F、1.23e5f、1.23F和1.23f均表示float型常量。
4.字符型常量
用单引号括起来的一个字符称为字符型常量,如在程序中书写的'a'、'A'、'?'和'#'分别表示4个字符,在内存中对应存放的是该4个字符的ASCII码值,其数据类型为char型。用这种方式只能表示键盘上的可输入字符,而ASCII码表(见附录A)中的一些控制字符无法用这种方式表示。例如,ASCII码值为10的字符是控制字符,表示换行,无法用上述简单方式表示。为此,C++提供了另外一种表示字符型常量的方法,即“转义”字符。转义字符是以反斜杠“”引导的特殊的字符型常量表示形式。一般地,'n'表示字母n,而'n'表示一个控制字符“换行”,跟随在“”后的字母n的意义发生了转变,所以叫作转义字符。在表2-3中列出了C++中预定义的转义字符。
表2-3 C++中预定义的转义字符


4050843c1c34ac1ffa5b157db344ae47330f88ed

2dc2bd008fa545b9415d51fc6c18fdd4f12045bc

表2-3中倒数第2、3行是转义字符的高级形式,它可以表示任一字符。例如,'n'表示控制字符“换行”,它的ASCII码是十进制数10,10的八进制和十六进制表示分别是12和a,因此'n'也可以表示成'12'、'xa'或'xA'。又如字母A的ASCII码是十进制数65,它的八进制和十六进制表示分别是101和41,所以在程序中,字母A可以表示成'A'、'101'或'x41'。特别注意表的最后一行,'0'是'ddd'的具体表示,其ASCII码值是0,它表示空字符,经常被用作字符串结尾标志。
5.字符串常量
字符串常量是用双引号括起来的字符序列,如"CHINA"、"How do you do."和"a"。字符串常量在内存中的存放形式是存储其连续字符的ASCII码值,末尾加一个特殊字符'0',作为结尾标志,其意义见表2-3的最后一行。例如,字符串"CHINA"在内存中的存储形式如图2-2所示。
注意:字符常量'a'和字符串常量"a"是不同的。字符常量'a'在内存中占用1字节,而字符串常量"a"在内存中占用2字节,如图2-3所示。

2.3.2 符号常量
编程者可以在程序中直接书写常量,但有时会遇到一些麻烦。例如,在进行数学计算时,程序中要多次使用π,则需要多次书写3.141 592 6,这样输入程序时可能出现将数字输入错误的情况。另外,计算时如果π的精度需要变化,如将3.141 592 6改为3.14,就需要在程序中进行多处修改。
C++提供了一种机制以避免上述麻烦。用一个标识符代表一个常量,称为符号常量。编程者可以在程序的开头定义一个符号常量,令其代表一个值,在后续程序中可使用该符号常量。
符号常量的定义形式为:
define PRICE 30
define PI 3.1415926
define S "China"
此3行代码定义了3个符号常量,它们是PRICE、PI和S。定义符号常量的好处是,如果在程序中多处使用了同一个常量,当需要对该常量修改时,只需要在定义处修改一处即可,而不需要修改程序中的多处。给符号常量取有意义的名字有利于提高程序的可读性,另外,一般使用大写字母给符号常量命名。
下面用一个例子说明符号常量的使用。
例2.1 符号常量的使用。
`include
using namespace std;
define PI 3.14159
int main(void)
{

float  r, c, a, sa;
r = 5.0f;                // 给半径赋值,5.0f是float型常量
c = 2 * PI * r;            // 计算圆周长
a = PI * r * r;             // 计算圆面积
sa = 4 * PI * r * r;             // 计算球表面积
cout << "PI = " << PI << '\n';      // A
cout << "c = " << c << '\n';
cout << "a = " << a << '\n';
cout << "sa = " << sa << '\n';
return 0;

}`
程序中A行字符串"PI="中的PI是字符串常量的一部分,不是独立的符号常量。

2.3.3 变量
在程序的运行过程中,其值可变的量称为变量。一个变量有3个要素,即变量名、变量的存储空间和变量的值。变量名必须用标识符来标识。变量根据其取值范围的不同可分为不同类型的变量,如字符型变量、整型变量、实型变量等,因此不同类型的变量的存储空间也不同。
1.变量定义
变量定义的一般格式为:
[<存储类别>] <变量类型> <变量名1>,<变量名2>,…,<变量名n >
这里不必关心变量的<存储类别>,在后续有关章节中有详细说明。定义变量的例子如下:
int a, b; // 定义2个整型变量a、b
unsigned u; // 定义1个无符号整型变量u
float f; // 定义1个单精度实型变量f
double d; // 定义1个双精度实型变量d
char c1, c2, c3; // 定义3个字符型变量c1、c2、c3
变量必须先定义后使用,原因为:
1)变量定义指定变量的类型,编译器根据类型给变量分配存储空间,并建立变量名与其存储空间的对应关系,程序中通过变量名给变量的存储空间赋值或读取该存储空间中的值,这一过程称为变量的存取。
2)C++中某些运算对参加运算的数据类型有限制,变量具有类型后,便于编译器对运算的合法性做检查。
2.变量赋初值
当使用变量时,变量必须有值,给变量赋初值的方法有两种,如下所示。
1)变量定义后,用赋值语句赋初值。例如:
int a, b;
a = 12; b = -24;
char c1, c2;
c1 = 'A'; c2 = 'B';
此处“=”是赋值运算符,表示将赋值号右边的值存入赋值号左边的变量对应的存储空间中。
2)在定义变量的同时直接赋初值(称为变量的初始化)。例如:
int a = 12, b = -24;
char c1 = 'A', c2 = 'B';
3.常变量
变量的值可以随时变化,即按需要给变量重新赋值。但有时为了保护变量的值,不允许对变量做修改,则需要将变量说明成常变量,具体方法是在变量定义语句前加说明符const。例如:
const float pi = 3.14;
常变量定义时必须初始化。具体应用见函数形式参数等相关内容。

相关文章
|
2月前
|
算法 数据挖掘 Shell
「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda
还在为生信软件的安装配置而烦恼?micromamba(micromamba是mamba包管理器的小型版本,采用C++实现,具有mamba的核心功能,且体积更小,可以脱离conda独立运行,更易于部署)帮你解决!
70 1
|
2月前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
55 1
|
2月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
321 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
24 0
|
4月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
37 1
|
4月前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
43 1
|
3月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
87 0
|
6月前
|
安全 C++
C++一分钟之-互斥锁与条件变量
【6月更文挑战第26天】在C++并发编程中,`std::mutex`提供互斥访问,防止数据竞争,而`std::condition_variable`用于线程间的同步协调。通过`lock_guard`和`unique_lock`防止忘记解锁,避免死锁。条件变量需配合锁使用,确保在正确条件下唤醒线程,注意虚假唤醒和无条件通知。生产者-消费者模型展示了它们的应用。正确使用这些工具能解决同步问题,提升并发性能和可靠性。
66 4
|
5月前
|
C++
【C++】string类的使用④(常量成员Member constants)
C++ `std::string` 的 `find_first_of`, `find_last_of`, `find_first_not_of`, `find_last_not_of` 函数分别用于从不同方向查找目标字符或子串。它们都返回匹配位置,未找到则返回 `npos`。`substr` 用于提取子字符串,`compare` 则提供更灵活的字符串比较。`npos` 是一个表示最大值的常量,用于标记未找到匹配的情况。示例代码展示了这些函数的实际应用,如替换元音、分割路径、查找非字母字符等。
|
6月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
48 0