变量:变量提供了一个具有名字的,可供程序操作的内存空间。变量的类型决定了变量的大小,取值,内存空间布局及可参与的运算。
在C++中,变量(variable)和对象(object)时一个意思。
一、变量定义
1、通用定义格式
类型说明符 标识符1(可初始化),...,标识符n(可初始化);
举例:
string book("math"),book2("english");
/*其中string为类型说明符,book和book2为标识符(即变量名),这两个变量
由(”字符串“)进行初始化*/
2、变量初始化
- 初始化是在创建变量的时候给变量一个特定的值
- 初始化不一定用=,具体如何初始化由变量类型决定
- 初始化不是赋值,这是两个完全不同的操作,初始化是创建变量的时候给变量赋予一个初始值;而赋值是将变量当前值擦除,用一个新值代替。虽然大多时候这种区分无所谓,但原理上是有区别的
- 不可以重复定义具有相同标识符的变量
- 变量在定义后可以立即使用,一句话中后定义的变量可以使用先定义的变量,如下面的定义是合法的:
int a = 1; b = a + 1;
- 对于内置类型,如果变量没有显式初始化,则定义在全部函数(包括main函数)外部的变量初始化为0;定义在函数内部的变量是不被初始化的,试图访问未被初始化的变量会引起错误。
- 对于自定义的类,类自身决定了便是是否允许不经初始化就定义,如果不初始化会是发生错误还是给一个默认值
- 综上,做好初始化每一个新定义的变量
二、变量声明
变量的声明用于C++的分离式编译,允许程序使用其他文件中定义的变量,其一般格式为:
extern 类型名 标识符;
- 声明是让程序知道一个已有变量的标识符和类型;而定义是创建了一个新的变量
- 在声明变量的时候,不可以对变量进行显式初始化。而一旦进行了显式初始化,即使有extern关键字语义也变成了定义变量,而重复定义一个变量则会报错
三、标识符
标识符就是变量的名字,具有以下规则:
- 标识符由字母,数字,下划线组成
- 对字母大小写敏感
- 不可以使用数字开头,定义在函数体外的标识符不能使用下划线开头
- 不能使用连续两个下划线
- 变量名用小写字母,类名用大写字母
- 变量由多个单词构成,单词间加下划线
四、变量名字作用域
- 作用域是指的是程序的一部分,一般用{}分割;变量名只在其声明或定义的语句所在的作用域有效。
- 全局作用域就是所有{}的外面
- 作用域可以嵌套,外层称为外层作用域,内层称作内层作用域,如:
#include "iostream"
using namespace std;
int a = 0;
int main(){
cout << a << endl;
double a = 2.0;
cout << a << endl;
}
- 内层作用域可以使用外层作用于定义或声明的变量,外层作用于则无法使用内层作用域定义或声明的变量
- 对于外层作用于已有的变量,内层作用域可以重新对该变量进行定义;此时外层作用域使用的是外层定义的变量,内层作用域默认使用的是内层重新定义的变量
- 当内层作用域对外层作用域已有变量重新定义时,在内层作用域中可以通过”作用域::标识符“的方式来使用外层作用与中的变量,其中“::变量名”则使用的是在全局作用域中定义的变量
- 如果内层要用到外层作用域中的变量,就不应该在内层作用再对该变量进行重新定义