【C++学习计划】深入浅出——变量作用域(Day3)

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

文章目录


上一篇:【C++养成计划】基本语法(Day2)
昨天我了解了C++的基本语法,今天我们来学习下变量作用域。在玩转变量作用域之前呢,我们得先来看下什么是变量

一、变量

  • 什么是变量? 变量名其实是程序可操作的内存的名称,变量值是内存里存储的数据。变量名由我们定义,它替代了变量值在内存中的存储地址,这样使得代码更友好。
  • 变量的命名规则。变量名也是一种标识符,是由字母、数字和下划线字符组成。具体规则同C++标识符。详见:【C++养成计划】基本语法(Day2)
  • 变量类型。每个变量都有指定的类型,类型决定了变量存储空间的大小和结构,该范围内的值都可以存储在内存中。
  • 变量定义、声明与初始化。变量在使用之前,需要首先声明(定义)其类型和名称。在声明(定义)一个变量的同时,也可以给它赋予初值。在C++程序中,大多数情况下变量声明等同于变量定义。
#include<iostream>
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_t
typedef short int wchar_t;

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

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

下表显示了各种变量类型在内存中存储值时占用的内存大小,以及该类型的变量所能存储的最大值和最小值。不同系统会有所差异。
在这里插入图片描述
对于未知数据类型的变量,想到知道它在内存中存储值时占用的内存大小,可以使用sizeof来确定该变量的字节长度。

cout<<"数据类型int占用内存的字节长度:"<<sizeof(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 <iostream>
using namespace std;
void Mul()
{
	int a=0,b=0; //局部变量
	cout<<"输入第一个数:";
	cin>>a;
	cout<<"输入第二个数:";
	cin>>b;
	int MulResult = a*b;
	cout<<a<<"*"<<b<<"="<<MulResult<<endl;
}
int main() 
{
	Mul();
	//cout<<a<<"*"<<b<<"="<<MulResult<<endl;
	return 0;
}

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

4.2 全局变量

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

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

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

4.3 局部变量覆盖全局变量

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

#include <iostream>
using namespace std;

int MulResult=10; //全局变量 
int main() 
{
	int MulResult=5; //局部变量 
	cout<<"MulResult="<<MulResult<<endl; 
	return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:
在这里插入图片描述

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

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:
在这里插入图片描述
正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

发布了0 篇原创文章 · 获赞 1 · 访问量 1177

猜你喜欢

转载自blog.csdn.net/qq_45533841/article/details/105496576