变量和常量是我们在c++程序编写过程中不能缺少的部分
1.变量
(1)变量的定义
变量指的是内容可以变化的量,是访问和保存数据的媒介。而在我们学习的c++程序中,变量也是可变的,它的值随着我们的需要不断改变。
我们对于变量进行使用时,首先就是对变量的定义,在c++语言中,变量的类型多种多样,有int,char,double,bool等多种类型,在下面的代码及注释中有这些类型变量的定义、初始化以及作用的介绍
int a = 0; //定义int类型变量并将其初始化为0
char ch = 'a'; //定义char类型变量ch并将其初始化为字符‘a’
double d1,d2; //定义双精度类型变量d1和d2
bool b = false; //定义bool类型变量并将其初始化为false
我们可以看到,int类型的变量定义的都是整数,而char类型的变量则可以存储一些字符,bool类型的变量存储的数据不太一样,只能是true或false,代表真或假,也可用0、1来代替,0代表假,1代表真double类型的变量则代表双精度变量,可以精确到小数点后的数字。
在后面的学习中我们还会学习到long、long long等类型的变量,在本文中我们不深入探讨。
(2)变量的作用域的生存期
谈到变量,就不得不说起它的作用域和生存期,变量的作用域决定了变量的可见性和有效性,即变量在哪些区域可用。类似下面这段代码
#include<iostream>
using namespace std;
int a = 0;
int main(void){
int b = 0;
return 0;
}
这段代码中我声明了两个变量a和b,其中变量a是全局变量,变量b是局部变量,我们在整个cpp文件中都可以使用a变量,而b变量只能用于main函数中。我们不妨再直观些
int main(void){
int a = 0;
for(int i = 0;i < 4;i++){
int b = i;
}
return 0;
}
这段代码中的变量a和b相比较,a的作用域更广泛,因为a变量可以用于整个main函数,而b变量仅能在声明它的for循环中使用,这也是新手容易犯的错误,有时我们需要让一个变量进入循环,就在循环中对其进行声明,但出循环后这个变量就不能使用了,这种情况需要我们在循环这个局部区域外声明变量然后在循环中对其进行更改。
(3)关于同名变量的屏蔽问题
我们在日常的代码编译过程中可能会遇到变量重名,分为两种情况:同一作用域,不同作用域
当我们声明的重名变量位于同一作用域时,程序会报语法错误,这是我们能够直接的找出错误,而对于不同作用域的重名变量程序不会报语法错误,但会出现同名变量的屏蔽具体看如下代码
#include<iostream>
using namespace std;
int a = 10; //定义全局变量a
int main(void){
int a = 50; //定义同名全局变量a
cout << a;
return 0;
}
结果显而易见,局部变量将全局变量给屏蔽了。
在上面的例子中,我们可以看到,如果局部变量和全局变量同名,局部作用域中只有局部变量起作用,c++为我们提供了一个解决办法,使用作用域限定符“::”表示同名的全局变量。
我们对上面的代码稍作改动
#include<iostream>
using namespace std;
int a = 10;
int main(void){
int a = 50;
cout << ::a;
return 0
}
很明显,我们在同名变量前加上作用域限定符后将局部变量带来的屏蔽问题解决了。
当然,作用域限定符只能用于访问与该作用域中的局部变量同名的全局变量,而不能用于访问另一作用域中的局部变量。
2.常量
(1)常量的定义
常量指的是程序执行中不变的量,有两种形式——字面常量和符号常量
字面常量
如12,-3.14,‘a’,“constant”等都是字面常量,简单来说就是字面本身就是一个常量
符号常量
符号常量的声明与变量的声明相似,但需加前缀const,声明方式见如下代码
const int a = 10; //声明int类型符号常量a
const double b = 20.0; //声明双精度类型符号常量b
const char c = 'a'; //声明char类型符号常量c
这里要注意!我们在声明变量的时候可以先进行定义,在需要的时候进行初始化,但声明符号常量的时候我们必须进行初始化,并且在后续程序运行过程中无法对已初始化的常量值进行更改。
(如有问题请评论指明,本人会虚心请教)