博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++学习计划】深入浅出——变量作用域(Day3)
阅读量:3965 次
发布时间:2019-05-24

本文共 2893 字,大约阅读时间需要 9 分钟。

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~

文章目录


上一篇:

昨天我了解了C++的基本语法,今天我们来学习下变量作用域。在玩转变量作用域之前呢,我们得先来看下什么是变量

一、变量

  • 什么是变量? 变量名其实是程序可操作的内存的名称,变量值是内存里存储的数据。变量名由我们定义,它替代了变量值在内存中的存储地址,这样使得代码更友好。
  • 变量的命名规则。变量名也是一种标识符,是由字母、数字和下划线字符组成。具体规则同C++标识符。详见:
  • 变量类型。每个变量都有指定的类型,类型决定了变量存储空间的大小和结构,该范围内的值都可以存储在内存中。
  • 变量定义、声明与初始化。变量在使用之前,需要首先声明(定义)其类型和名称。在声明(定义)一个变量的同时,也可以给它赋予初值。在C++程序中,大多数情况下变量声明等同于变量定义。
#include
using namespace std;int main(){
//1.声明(定义)变量 int a; int b, c; //2.初始化 a = 0; b=1, c=2; //3.边声明边初始化 int a=0; int b=0, c=0; return 0;}

二、变量类型

在进行编程时,需要用到各种变量来存储各种信息。变量在使用之前,需要首先声明其数据类型,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。

基本的数据类型有:字符型、宽字符型、整型、浮点型、双浮点型、布尔型、无类型等。
在这里插入图片描述
其中宽字符型比较特殊,其实是使用关键字typedef,由 short int 替换而来的数据类型。初学者可以先不掌握。

//关键字typedef将变量类型 short int 替换成了 wchar_ttypedef short int wchar_t;

一些基本的数据类型还可以使用一个或多个类型修饰符进行修饰:

  • signed :有符号
  • unsigned:无符号
  • short:短
  • long:长

下表显示了各种变量类型在内存中存储值时占用的内存大小,以及该类型的变量所能存储的最大值和最小值。不同系统会有所差异。

在这里插入图片描述
对于未知数据类型的变量,想到知道它在内存中存储值时占用的内存大小,可以使用sizeof来确定该变量的字节长度。

cout<<"数据类型int占用内存的字节长度:"<

C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,这将会在后续的章节中进行讲解。

三、常量

  1. 字面常量。字面常量可以是任何类型,比如布尔型:true、false;整型:1、2、100;字符串:“Hello C++”,"I love you"等等。
  2. 使用const将变量声明为常量。从实用和编程的角度来看,这是最重要的C++常量声明方式。声明方式如下:
将圆周率Pi声明为一个常量const double Pi = 3.14;注:Pi是一个类型为double的常量。因此后面再不能对Pi重新赋值,否则将出现编译错误。
  1. 枚举常量。在某些情况下,变量只能有一些特定的取值。例如,彩虹只有七种颜色,指南针的方位不能为“左”。在这些情况下,变量的取值范围由自己确定,可使用关键字enum来声明枚举常量。
enum RainbowColors{
Vilet = 0; Indigo, Blue, Green, Yellow, Orange, Red};用枚举常量来指定变量的类型,这样声明的变量只能取指定的值。因此,如果要声明一个变量来存储彩虹的颜色,做法如下:RainbowColors MyColor = Blue;声明枚举常量时,编译器将枚举值(Vilet等)转换为整数,每个枚举值都比前一个大1。你可以指定起始值,如果没有指定,编译器默认起始值为0。因此,可知MyColor存储的蓝色Blue对应的数值是:2
  1. 使用#define定义常量。这种做法已经被摒弃,因此不建议使用这种方法。这里介绍只是为了帮助你理解一些旧程序。
这里同样将圆周率Pi声明为一个常量,做法如下:#define Pi 3.14这是一个预处理器宏,让预处理器将随后出现的所有Pi都转换为3.14。这是一种文本替换,而不是智能替换。编译器既不了解也不关心常量的类型。

四、变量作用域

4.1 局部变量

在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。

#include 
using namespace std;void Mul(){
int a=0,b=0; //局部变量 cout<<"输入第一个数:"; cin>>a; cout<<"输入第二个数:"; cin>>b; int MulResult = a*b; cout<
<<"*"<<<"="<
<

这是一个简单的计算乘法的程序,运行结果如下:

在这里插入图片描述
分析:程序中的a、b是局部变量,作用域在函数Mul()内。如果在主函数main()中添加注释了的那一行,程序会报错。因为不能在函数Mul()外使用局部变量a、b。

4.2 全局变量

在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量可以被任何函数访问。全局变量一旦声明,在整个程序中都是可用的。

#include 
using namespace std;//声明全局变量int a=0, b=0, MulResult=0;void Mul(){
cout<<"输入第一个数:"; cin>>a; cout<<"输入第二个数:"; cin>>b; MulResult = a*b; cout<
<<"*"<<<"="<
<

运行结果如下:

在这里插入图片描述
分析:这次把a、b声明为全局变量,可见a、b不仅在Mul()函数中有效,在主函数main()中也有效。

4.3 局部变量覆盖全局变量

在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:

#include 
using namespace std;int MulResult=10; //全局变量 int main() {
int MulResult=5; //局部变量 cout<<"MulResult="<
<

当上面的代码被编译和执行时,它会产生下列结果:

在这里插入图片描述

4.4 初始化局部变量和全局变量

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

在这里插入图片描述
正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

转载地址:http://hqzki.baihongyu.com/

你可能感兴趣的文章
申请美国商务签证(B1/B2) -- 大连
查看>>
Oracle SQL 精萃
查看>>
特殊符号用英语怎么说
查看>>
Oracle PL/SQL 精萃
查看>>
PL/SQL 注释(Comment)
查看>>
PL/SQL 标识符(Identifier)
查看>>
Oracle 空字符串和NULL
查看>>
Oracle 内置数据类型 -- 字符
查看>>
Oracle 内置数据类型 -- 数值
查看>>
Oracle 内置数据类型 -- 日期时间
查看>>
Oracle 限定返回的结果集 -- ROWNUM
查看>>
Oracle 限定返回的结果集 -- ROW_NUMBER
查看>>
Oracle 集合操作符
查看>>
Oracle SQL中的 IF ELSE
查看>>
Oracle 将null值转化为其他值
查看>>
Oracle 分析函数
查看>>
PL/SQL 数据类型和变量 -- 字符
查看>>
PL/SQL 数据类型和变量 -- 数值
查看>>
Oracle 内置数据类型 -- ROWID
查看>>
PL/SQL 数据类型和变量 -- ROWID
查看>>