《C++ Primer Plus 第六版 中文版》的研读与学习(十一)

超、凢脫俗 2023-02-11 03:11 78阅读 0赞

往期传送门:
《C++ Primer Plus 第六版 中文版》精选习题解析(一)
《C++ Primer Plus 第六版 中文版》的研读与学习(十)
《C++ Primer Plus 第六版 中文版》的研读与学习(九)
《C++ Primer Plus 第六版 中文版》的研读与学习(八)
《C++ Primer Plus 第六版 中文版》的研读与学习(七)
《C++ Primer Plus 第六版 中文版》的研读与学习(六)
《C++ Primer Plus 第六版 中文版》的研读与学习(五)
《C++ Primer Plus 第六版 中文版》的研读与学习(四)
《C++ Primer Plus 第六版 中文版》的研读与学习(三)
《C++ Primer Plus 第六版 中文版》的研读与学习(二)
《C++ Primer Plus 第六版 中文版》的研读与学习(一)

根据前面的学习,我们已经了解了C++的基本操作,接下来我们就详细讲一讲C++中变量相关的内容。
在C++中,变量的存在大致有如下几个目的:

  • 明确信息储存的位置
  • 明确存储的值(value)
  • 明确存储信息的类型

在《C++ Primer Plus 第六版 中文版》的研读与学习(五)中,我们提到了C++中变量的几种基本类型,本节我们首先来介绍整数在C++中的表示。














































位数(bit) 字节数(byte) 最小值 最大值
int 整型 32 4 -32768 32767
short int 短整型 16 2 -2147483648 2147483647
long 长整型 32 4 -2147483648 2147483647
long long 双长整型 64 8 -9223372036854775808 9223372036854775807

这里简单介绍一下计算机原理的一些内容。众所周知,计算机以二进制储存数据,也就是说,我们无论以哪一种语言(高级语言和汇编语言),在计算机内都要转化为0-1编码(机器语言)才能够被计算机理解并执行。上表中的“位”(bit)就表示一位二进制数,有0、1两种可能的情况。那么,8bit就有2的8次幂即256种可能的值,也就是可以表示-128至127之间的整数,这样,我们称8bit为1byte(字节B)。

为了更好地理解整型变量在C++中的应用,我们来看这样的一段程序:

  1. #include <iostream>
  2. #include <climits> // 旧版本中使用limits.h
  3. using namespace std;
  4. int main()
  5. {
  6. int n_int = INT_MAX; // 初始化n_int使之为整型数据的最大值
  7. short n_short = SHRT_MAX; // 在climits文件中定义的量
  8. long n_long = LONG_MAX;
  9. long long n_llong = LLONG_MAX;
  10. // 变量类型声明符对应的类型或变量的大小
  11. cout << "int is " << sizeof(int) << " bytes." << endl;
  12. cout << "int is " << sizeof n_short << " bytes." << endl;
  13. cout << "int is " << sizeof(long) << " bytes." << endl;
  14. cout << "int is " << sizeof n_llong << " bytes." << endl;
  15. cout << endl;
  16. cout << "Maximum values:" << endl;
  17. cout << "int: " << n_int << endl;
  18. cout << "short: " << n_short << endl;
  19. cout << "long: " << n_long << endl;
  20. cout << "long long: " << n_llong << endl;
  21. cout << "Minimum int value = " << INT_MIN << endl;
  22. cout << "Bits per byte = " << CHAR_BIT << endl;
  23. return 0;
  24. }

该程序的运行结果如下:

  1. int is 4 bytes.
  2. int is 2 bytes.
  3. int is 4 bytes.
  4. int is 8 bytes.
  5. Maximum values:
  6. int: 2147483647
  7. short: 32767
  8. long: 2147483647
  9. long long: 9223372036854775807
  10. Minimum int value = -2147483648
  11. Bits per byte = 8

有必要注意的是,long long型变量为C++11新增的数据类型,部分编译器可能不支持,如遇这种情况,请删除相关的代码语句。

上述程序中,使用了我们之前没有接触到的函数sizeof(),该函数的语法如下:

  1. sizeof(operator);
  2. sizeof varible;

当参数为变量类型声明符(operator)时,需要外带圆括号,返回该类型变量的长度(字节数);当参数为变量时,圆括号可有可无,返回该变量的长度(字节数)。

在上述程序中,使用到了<climits>头文件(老式版本中为<limits.h>),其中包含了关于整型数据的极限的有关信息。例如,其中定义了INT_MAX为int型数据的最大取值,CHAR_BIT为一个字符所占的位数(即字节与位的换算关系)等。
<climits>头文件中的符号常量如下表所示:


















































































符号常量 含义
CHAR_BIT char的位数
CHAR_MAX char的最大值
CHAR_MIN char的最小值
SCHAR_MAX signed char的最大值
SCHAR_MIN signed char的最小值
UCHAR_MAX unsigned char的最大值
SHRT_MAX short的最大值
SHRT_MIN short的最小值
USHRT_MAX unsigned short的最大值
INT_MAX
INT_MIN int的最小值
UINT_MAX unsigned int的最大值
LONG_MAX long的最大值
LONG_MIN long的最小值
ULONG_MAX unsigned long的最大值
LLONG_MAX long long的最大值
LLONG_MIN long long的最小值
ULLONG_MAX unsigned long long的最大值

为了达到这样的目的,<climits>头文件中使用了如下的宏定义的预处理器命令:

  1. #define INT_MAX 32767

有关宏定义的预处理器命令,我们在以后的文章中会讲到。

变量的初始化过程中,可以将变量的声明与赋值合并或分开,即如下的两种写法都是正确的:

  1. int n_int = INT_MAX;
  2. int n_int;
  3. n_int = INT_MAX;

如果对同一个变量进行多次赋值,则之后的赋值会覆盖之前的赋值:

  1. int a = 5;
  2. a = 10;
  3. cout << a << endl;
  4. // 该算法运行后输出结果为 10

当然,我们也可以利用std::cin对变量赋予键盘输入的值。

另外,C++11中提供了对变量进行赋值的特殊方式,即将被赋值的量放在花括号内:

  1. int a = { 3};

如此以来,以后进行强制类型转换的操作中,可以避免许多错误。在本书中,明确提出了在支持C++11的编译器中可以省略=,但是笔者只用CFree5编译器,省略等号却出现了bug。

文章的最后,我们谈一谈C++变量的命名规范。
首先,必须遵守的规则有:

  • 在名称中只能出现字母、数字和下划线_,不允许出现其他任何字符。
  • 名称的第一个字符不能是数字
  • 大写字母与小写字母区分
  • 以两个下划线开头的名称保留给实现(编译器及其资源)使用,以一个下划线开头的名称保留给实现用作全局变量。
  • 一般的编译器对名称长度没有限制。

一般地,我们对变量的命名本着便于阅读程序的原则进行,因此,应该避免使用原有函数名或变量名进行命名;变量的名称也应该尽可能体现变量的含义,如my_carrotsmyCarrots等。

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读