变量(variable)提供一个具名的、可供操作的存储空间。
c++中每个变量都具有其数据类型,数据类型决定着变量所占存储空间的大小和布局方式、该空间能存储的值的范围,以及变量所能参与的运算。
变量的定义
首先是类型说明符,随后紧跟变量名列表。变量名之间以逗号隔开。
定义时,还可以为变量赋初值(初始化)。
例子:int a;
int a = 10;
默认初始化
如果定义变量的时候没有赋初始值,则变量被默认初始化。
默认值到底是什么由变量类型决定,也有变量的位置决定。
如果变量未被显示初始化,则它的值由定义的位置决定。定义与任何函数体之外的初始值为0,定义在函数体之内的初始值为1。
看例子:
#include <iostream>
using namespace std;
int a;
int main()
{
int b;
cout << "a:" << a <<endl;
cout << "b:" << b <<endl;
return 0;
}
结果:
变量声明和定义的关系
为了可以把程序拆分成多个逻辑部分来编写,c++语言支持分离式编译(separate compilation)机制,该机制允许将程序分割成若干个文件,每个文件可以被独立编译。
为支持分离式编译,c++将声明和定义分离开来。
声明使得名字为程序所知,定义则是为了创建与名字关联的实体。
通过声明,可以使得文件之间共享代码。
如果想声明一个变量而不是定义它,需要加上extern关键字。
例子:extern int a;//声明
int a;//声明和定义
如果给由extern关键字标记的变量赋了初值,那么就抵消了extern的作用
extern int a = 3;//声明和定义
标识符
数字字母下划线组成
必须由数字字母开头
大小写敏感
无长度限制
名字的作用域
作用域是程序的一部分,在其中名字有特定的含义。c++语言中大多数作用域都一花括号分隔。
同一个名字在不同的作用域中可能指向不同的实体。
名字的有效区域始于名字的声明语句,结束于作用域的末端。