【跟学C++】C++变量与常量(Study3)


 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================

1、变量

1.1、变量的理解

  变量代表一个有名字的、具有特定属性的一个存储单元,变量用来存放数据,也就是存放变量的值,变量顾名思义,变量的值可以改变,变量有特定的类型,类型决定了存储单元的大小和变量值的范围。
  从本质上来说,变量代表了一段可操作的内存,也可以认为变量是内存的符号化表示。当程序中需要使用内存时,可以定义某种类型的变量。此时编译器根据变量的数据类型分配一定大小的内存空间。程序就可以通过变量名来访问对应的内存了。
在这里插入图片描述

1.2、变量的命名规则

  变量的命名规则和标识符规则基本一致,字母、数字、下划线组成。

1.3、变量类型

  C++中每个变量都有对应的类型,类型决定了存储单元的大小和变量值的范围。基本的数据类型有:
  (1)整数类型:byte、short、int、long
  (2)小数类型:float、double
  (3)字符类型:char
  (4)布尔类型:boolean
  其中,一个基本的数据类型可以用类型修饰符进行修饰,例如有符号的signed、无符号的unsigned、长long、短short,不同类型所能存储的范围大小不同:
在这里插入图片描述

1.4、变量定义

  说到这里,我们该如何定义或初始化一个变量。变量使用之前,需要对变量进行定义,包括其数据类型和名称,定义变量时我们也可以对其进行赋予初值,也就是所谓初始化。

#include <iostream>
using namespace std;
int main(){
	//定义变量
	int a;
	int b,c;
	//定义变量并赋予初值
	int z=12;
	int p=1,q=2;
	
	return 0;
}
1.5、变量的生命周期

  先了解基本常识:
  在程序运行时内存中有三个区域可以保存变量:静态存储区、栈(stack)和堆(heap);
  如果说变量的数据类型决定了对应内存的大小,那么存储类型则影响着对应内存的使用方式。所谓使用方式,具体说就是在什么时间、程序的什么地方可以使用变量,即变量的生命周期和作用域。
  我们先说生命周期:
  1 、全局变量和静态局部变量(定义时使用关键字static)都保存在静态存储区,其特点是:在编译时分配内存空间并进行初始化。在程序运行期间,变量一直存在,直到程序结束,变量对应的内存空间才被释放。

  2、 非静态局部变量(又称为自动变量)保存在栈中,其特点是:在变量所在的函数或模块被执行时动态创建,函数或模块执行完时,变量对应的内存空间被释放。

  3 、所有用malloc分配的内存(又称为动态内存)都在堆中,其特点是:通过指针来访问动态分配的内存。既可以通过free来手动释放动态内存,也可以在程序结束时由系统自动释放。

1.6、变量的作用域

  作用域指的是变量的可见范围,即在变量的生命周期内,程序的哪些部分可以使用该变量。据变量定义的位置可分为全局变量(定义在函数体外的变量)和局部变量(定义在函数体内的变量,包括形参)。
  (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;
}

  这是使用局部变量进行计算加法的简单程序,程序中ab均为函数Test()内部的局部变量,主函数调用Test()实现寒暑表内部的加法计算,若将注释部分进行编译,程序就会报错,原因是局部变量ab无法在函数外进行调用。
在这里插入图片描述
在这里插入图片描述
  (1) 全局变量
  全局变量的作用域从定义点开始一直到源文件的结束。如果要在定义点之前使用全局变量的话就需要使用关键字extern对作用域进行扩展。全局变量默认是可以被其他文件引用的。如果希望仅限于本文件使用的话,需要在定义时使用关键字static
  动态内存只要没有被释放就可以在程序的任何地方使用,前提是要知道动态内存的地址。

#include <iostream>
using namespace std;
int a = 0, b = 0; //全局变量
int Result = 0;
void Test()
{
	cout << "输入第一个数:";
	cin >> a;
	cout << "输入第二个数:";
	cin >> b;
	Result = a + b;
	cout << "Test函数内: "<<a << "+" << b << "=" << Result << endl;
}
int main()
{
	Test();
	cout<< "主函数: " <<a <<"+"<<b<<"="<<Result<<endl;
	return 0;
}

  这次将ab定义为全局变量,不仅在Test()函数内可用,主函数main()也可以调用。
在这里插入图片描述
   注意点1:在程序中,局部变量全局变量的名称如果相同,在函数内,局部变量的值会覆盖全局变量的值

#include <iostream>
using namespace std;
int a = 0, b = 0; //全局变量
int Result = 0;
void Test()
{
	cout << "输入第一个数:";
	cin >> a;
	cout << "输入第二个数:";
	cin >> b;
	Result = a + b;
	cout << "Test函数内: "<<a << "+" << b << "=" << Result << endl;
}
int main()
{
	Test();
	//注意点:这里定义一个局部变量Result与全局变量Result名字相同
	int Result=100;
	cout<< "主函数: " <<a <<"+"<<b<<"="<<Result<<endl;
	return 0;
}

  这里有和上面就有不同之处了,函数Test()计算后的Result,会被下面同名局部变量Result所替代。
在这里插入图片描述
   注意点2:在程序中,定义局部变量时,系统是不会自行赋予初值,在定义全局变量时,系统会自动定义初值,不同数据类型变量,初值不一样,例如:
  
(1) int–>0
  (2)char–>‘\0’
  (3)float–>0
  (4)double–>0
  (5)pointer–>NULL

养成良好编程习惯很重要!

2、常量

  常量就没有变量那么复杂,常量可以为任意类型,例如布尔、整型、字符串等等。

int a = 10

  这里要注意的是const的用法,我们都知道像圆周率都是固定的值,从编程角度来说,我们想让这种常量值用不可变且不可在赋值,我们可以这样定义:

//将圆周率PI声明为一个常量
const double PI=3.14

:PI是一个类型为double的常量。因此后面再不能对PI重新赋值,否则将出现编译错误。
  
  这里引用一下【AI菌】对枚举常量的解释:枚举常量。在某些情况下,变量只能有些特定的取值。 例如,彩虹只有七种颜色,指南针的方位不能为“左”。在这些情况下,变量的取值范围由自己确定,可使用关键字enum来声明枚举常量

enum RainbowColors
{
	Vilet = 0;
	Indigo,
	Blue,
	Green,
	Yellow,
	Orange,
	Red
};
//用枚举常量来指定变量的类型,这样声明的变量只能取指定的值。因此,如果要声明一个变量来存储彩虹的颜色,做//法如下:
//RainbowColors MyColor = Blue;
//声明枚举常量时,编译器将枚举值(Vilet等)转换为整数,每个枚举值都比前一个大1。
//你可以指定起始值,如果没有指定,编译器默认起始值为0。
//因此,可知MyColor存储的蓝色Blue对应的数值是:2

3、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqy阳

预祝上岸,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值