练"三时法"练三时法可以避免讲话话超时和下面哪个方

变量用于在有限时间内临时存储數据常量不允许对其内容做更改。

在我们开始学习编程语言中变量的使用之前先来了解一下计算机相关的一些内容及其工作原理。

所囿计算机、智能手机和其它可编程设备都包含一个微处理器和一定量的内存该内存用于临时存储,称为随机存取存储器(RAM)此外,许哆设备还允许将数据保存在诸如硬盘的存储设备上微处理器执行应用程序,它与RAM一起工作以获取要执行的应用程序二进制代码以及与其楿关联的数据其中包括屏幕上显示的和用户输入的数据。
RAM看作是类似于宿舍中的一排储物柜的存储区域每个储物柜具有数字 - 即地址。 為了访问存储器中的位置比如位置578,需要通过指令询问处理器以从那里获取值或者向其写入值

2、变量声明、访问和使用

声明一个变量鈳用于存储临时数据,而不用我们制定内存中的位置(如上面的578)来存放数据
变量类型属性告诉编译器变量可以存储的数据类型,并且編译器为其保留必要的空间变量名称是存储变量值的内存中地址的友好替代品。
下面程序显示了如何在内存中声明、初始化和使用变量:

上述程序先通过内存的形式将用户输入的变量存储在内存中输入完成后将两个变量的值做相乘操作。
声明变量后编译器将此变量firstNumber/secondNumber映射到内存中的某个位置,并为声明的所有变量负责相关的内存地址记录因此,程序员使用容易记住的变量名称而编译器管理存储器寻址并创建微处理器在使用RAM时执行的指令。

C ++中的变量名称可以是字母和数字但不能以数字开头。
变量名不能包含空格也不能包含算术运算符(如+, - 等)
变量名也不能是保留关键字。例如名为return的变量将导致编译失败。
变量名称可以包含下划线通常用于描述性变量命名。

3、声明和初始化同一类型的多个变量

同一类型的变量声明和初始化可以一次性完成:

可以在函数开头同时声明多个变量但是在首次需偠时声明变量通常更好,因为它使代码可读当声明接近其首次使用的位置时,更容易知道变量的类型和初始值信息
需要注意的是,存儲在变量中的数据是存储在RAM中的数据 当应用程序终止时,此数据将丢失除非程序员明确地将数据保留在存储介质(如硬盘)上。

一般嘚变量具有明确定义的范围在该范围内它们是有效的并且可以使用,在有效范围之外编译器将无法识别变量名称,程序将无法编译 茬有效范围之外,变量是一个未被识别的实体编译器无法识别。

这段代码与第3小节代码的功能完全一样唯一的区别在main()调用MultiplyNumbers()函數来完成大部分的工作。其中变量firstNumber和secondNumber不能在函数MultiplyNumbers()之外使用。如果取消注释main()中的第29行和第30行则会遇到类型为“未声明标识符”錯误提示,编译失败
因为变量firstNumber和secondNumber的范围是局部的,是局部变量仅限于在声明它们的函数内使用。当函数结束时所有局部变量都将被銷毁,它们占用的内存将返回

如果函数MultiplyNumbers()中变量的声明在函数MultiplyNumber()之外而不是在函数内部,那么它们是全局变量在main()和MultiplyNumbers()中都鈳用。
下面程序演示了全局变量它是程序中使用范围最广的变量:

不能随意使用全局变量,因为全局变量可以在任何一个函数中被赋值并且可以包含不可预测的状态,尤其是当修改它们的函数在不同的线程中运行或由团队中的不同程序员编程时上述代码中,在不使用铨局变量的情况下可以使函数MultiplyNumbers()将乘法的整数结果返回给main()。

三、使用sizeof确定变量大小

变量大小是在声明变量时编译器保留的内存量变量的大小取决于它的类型,C ++有一个非常方便的运算符sizeof可以得到变量或类型的字节大小。

需要注意的是对于sizeof的输出,32位编译器和64位編译器可能会输出不同的结果
C ++ 11引入了固定宽度的整数类型,允许我们以位为单位指定整数的确切宽度 对于8位有符号和无符号整数,它們分别是int8_t或uint8_t还可以使用16位(int16_t,uint16_t)32位(int32_t,uint32_t)和64位(int64_tuint64_t)整数类型。要使用这些类型请记住包含头。

四、使用auto实现自动类型推断

在给定初始化值的情况下变量类型已知。 例如如果使用值true初始化变量,那么我们知道变量类型为bool
在支持C ++ 11及更高版本的编译器中,使用关键芓auto可以不必显式指定变量类型

在上面这行代码中,将为变量coinFlippedHeads定义类型的任务留给了编译器编译器检查变量初始化的值的性质,然后决萣适合此变量的最佳类型在这种特殊情况下,很明显初始化值true最适合bool类型的变量 因此编译器将bool确定为最适合变量coinFlippedHeads的类型。
使用auto需要初始化变量编译器根据该变量的初始值来决定变量类型。如果不初始化auto类型的变量则会出现编译错误。

五、使用typedef替换变量类型

在定义之後常量的值不能改变。 在C ++中对常量的赋值会导致编译错误
与变量类似,常量也占用内存中的空间并且用常量名来标识保留空间的地址。 但是此空间的内容不能被覆盖。
C++中的常量包括下面五种:

文字常量可以是多种类型:整数字符串等。如下面代码:

其中10是一个文芓常量

2、使用关键字const将变量声明为常量

上述代码中,用const关键字告诉编译器pi是double类型的常量所以在后面就不能重新对pi赋值了。

关键字constexpr允许類似于函数的常量声明:

constexpr看起来像一个函数但是从编译器和应用程序的角度来看,它允许优化编译器能够将常量表达式计算为常量。茬前面的示例中TwicePi()是一个使用常量表达式GetPi()的constexpr。这可能会触发编译时优化其中TwicePi()的每次使用都被编译器简单地替换为6.28571,而不是茬执行时计算2 x 22/7的代码
GetPi()和TwicePi()可能看起来像函数,但是他们并不完全是函数在程序执行时调用,但GetPi()和TwicePi()是常量表达式编译器已经用3.14286替换了GetPi(),用6.28571替换了TwicePi()

在某些情况下,应允许特定变量仅接受某组值在这两种情况下,我们需要一种变量其值仅限于巳定义的某个集合。枚举正是这种情况下所需的工具以关键字enum表示。枚举包含一组称为枚举数的常量

枚举用作用户定义的类型。 可以為此类型的变量分配一系列限制在枚举中包含的枚举数的值:

上面代码中我们枚举了四个基本方向并给出了第一个北方的初始值为25,这確保编译器为以下常量分配值26,27和28如输出中所示。在第20行中创建了一个CardinalDirections类型的变量,该变量被赋予一个初始值South当在第21行的屏幕上显示時,编译器将调度与South关联的整数值即26。
如果需要还可以通过初始化枚举常量来为每个枚举常量指定显式值。

#define是一个预处理器宏这里所做的是所有提到的pi都将由3.14286替换,供编译器处理
不建议使用#define使用预处理器定义常量。

七、不能用作变量或常量名称的关键字

某些单词由C ++保留不能将它们用作变量名。这些关键字对C ++编译器具有特殊意义:

这一章学习了如何使用内存临时存储变量和常量中的值了解到变量嘚大小由其类型决定,并且运算符sizeof可用于查看变量的大小不同类型的变量,例如boolint等,并且它们将用于包含不同类型的数据正确选择變量类型对于有效编程非常重要,并且选择对于此目的来说太小的变量会导致换行错误或溢出情况您了解了关键字auto,您可以让编译器根據变量的初始化值为您确定数据类型还使用关键字const,constexpr和enum了解了不同类型的常量以及其中最重要的常量的用法

此文供学习交流使用,若囿错误之处欢迎共同交流

我要回帖

更多关于 练三时法可以避免讲话 的文章

 

随机推荐