【C++学习计划】深入浅出——变量作用域(Day3)
发布日期:2021-07-27 05:11:50
浏览次数:5
分类:技术文章
本文共 2893 字,大约阅读时间需要 9 分钟。
写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我
热爱AI、热爱分享、热爱开源
! 这博客是我对学习的一点总结与记录。如果您也对深度学习、机器视觉、算法、C++
感兴趣,可以关注我的动态,我们一起学习,一起进步~
文章目录
上一篇:
昨天我了解了C++的基本语法,今天我们来学习下变量作用域
。在玩转变量作用域之前呢,我们得先来看下什么是变量
? 一、变量
什么是变量?
变量名其实是程序可操作的内存的名称,变量值是内存里存储的数据。变量名由我们定义,它替代了变量值在内存中的存储地址,这样使得代码更友好。变量的命名规则
。变量名也是一种标识符,是由字母、数字和下划线字符组成。具体规则同C++标识符。详见:变量类型
。每个变量都有指定的类型,类型决定了变量存储空间的大小和结构,该范围内的值都可以存储在内存中。变量定义、声明与初始化
。变量在使用之前,需要首先声明(定义)其类型和名称。在声明(定义)一个变量的同时,也可以给它赋予初值。在C++程序中,大多数情况下变量声明等同于变量定义。
#includeusing 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++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等,这将会在后续的章节中进行讲解。
三、常量
字面常量
。字面常量可以是任何类型,比如布尔型:true、false;整型:1、2、100;字符串:“Hello C++”,"I love you"等等。使用const将变量声明为常量
。从实用和编程的角度来看,这是最重要的C++常量声明方式。声明方式如下:
将圆周率Pi声明为一个常量const double Pi = 3.14;注:Pi是一个类型为double的常量。因此后面再不能对Pi重新赋值,否则将出现编译错误。
枚举常量
。在某些情况下,变量只能有一些特定的取值。例如,彩虹只有七种颜色,指南针的方位不能为“左”。在这些情况下,变量的取值范围由自己确定,可使用关键字enum来声明枚举常量。
enum RainbowColors{ Vilet = 0; Indigo, Blue, Green, Yellow, Orange, Red};用枚举常量来指定变量的类型,这样声明的变量只能取指定的值。因此,如果要声明一个变量来存储彩虹的颜色,做法如下:RainbowColors MyColor = Blue;声明枚举常量时,编译器将枚举值(Vilet等)转换为整数,每个枚举值都比前一个大1。你可以指定起始值,如果没有指定,编译器默认起始值为0。因此,可知MyColor存储的蓝色Blue对应的数值是:2
使用#define定义常量
。这种做法已经被摒弃,因此不建议使用这种方法。这里介绍只是为了帮助你理解一些旧程序。
这里同样将圆周率Pi声明为一个常量,做法如下:#define Pi 3.14这是一个预处理器宏,让预处理器将随后出现的所有Pi都转换为3.14。这是一种文本替换,而不是智能替换。编译器既不了解也不关心常量的类型。
四、变量作用域
4.1 局部变量
在函数或一个代码块内部声明的变量,称为局部变量
。它们只能被函数内部或者代码块内部的语句使用。
#includeusing 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 全局变量
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量
。全局变量可以被任何函数访问
。全局变量一旦声明,在整个程序中都是可用的。
#includeusing 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 局部变量覆盖全局变量
在程序中,局部变量和全局变量的名称可以相同
,但是在函数内,局部变量的值会覆盖
全局变量的值。下面是一个实例:
#includeusing namespace std;int MulResult=10; //全局变量 int main() { int MulResult=5; //局部变量 cout<<"MulResult="< <
当上面的代码被编译和执行时,它会产生下列结果:
4.4 初始化局部变量和全局变量
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化
。定义全局变量时,系统会自动初始化
为下列值:
转载地址:https://blog.csdn.net/qq_45533841/article/details/105496576 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年09月16日 10时53分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
量化策略回测BoolC
2019-05-27
量化策略回测DCCV2
2019-05-27
mongodb查询优化
2019-05-27
五步git操作搞定Github中fork的项目与原作者同步
2019-05-27
git 删除远程分支
2019-05-27
APP真机测试及发布
2019-05-27
通知机制 (Notifications)
2019-05-27
iOS 如何放大按钮点击热区
2019-05-27
ios设备唯一标识获取策略
2019-05-27
获取推送通知的DeviceToken
2019-05-27
CocoaPods安装和使用教程
2019-05-27
Beginning Auto Layout Tutorial
2019-05-27
block使用小结、在arc中使用block、如何防止循环引用
2019-05-27
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
2019-05-27
iOS开发中遇到的问题整理 (一)
2019-05-27