变量
变量是程序可操作的存储区的名称。C++中每个变量都有指定的类型,不同类型的变量有不同的存储大小和布局。变量存储于内存中,运算符可应用于变量上。
变量的类型
类型 | 解释 |
---|---|
bool | 存储true或false |
char | 一个字符,通常占一个字节。整数类型。 |
int | 整形,占四字节。 |
float | 单精度浮点数,四字节,1位符号,8位指数,23位尾数 |
double | 双精度浮点数,八字节,1位符号,11位指数,52位尾数 |
void | 类型缺失 |
wchar_t | 宽字符型 |
另外可以定义枚举
、指针
、数组
、引用
、数据结构
、类
等。
变量的定义和初始化
变量的定义即要求编译器在此处创建变量的存储:
typeA var; //声明一个变量
typeB var1, var2, var3; //声明多个变量
变量可以在定义的时候被初始化:
int a; //声明时未初始化
int b = 3; //声明时初始化为3
定义时没有初始化的带有静态存储持续时间的(一般表现为全局变量)变量默认初始化为NULL,即所有字节都是0;
其他所有变量(一般表现为局部变量)的初始值未定义的话为为其开辟的存储空间的原内容(乱码)。
强烈建议定义变量时手动初始化以确保安全
在变量创建的时候指明其类型有助于划定对应的空间,和未来程序以何种方式处理(解读)此变量的指针。
变量的声明
不同于变量的定义
int a = 0; //定义并声明了变量 a
extern int a; //只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。
类似于函数的声明与函数的定义之间的区别。
void fun1(); //函数声明
void fun1(){ //函数定义
cout<<"fun1"<<endl;
}
类型转化规则
分为自动转化、强制转化
自动转化
- 参与运算的量的类型不同,则转化为相同后运算
- 数据类型转换力求保证精度:
- 向字节数高的方向靠拢;
- 向无符号的方向靠拢。
- 浮点数运算统一转换为double双精度再进行运算。
- char与short运算时先转化为int再参与运算。
- 赋值运算保留左值的数据类型(可能会丢失精度)。
强制转化
可以手动通过类型转化运算来实现:一般形式为(类型说明符)表达式的形式。
int a = 1;
double b = 2.1;
cout << "a + b = " << a + (int)b << endl; //输出为a + b = 3
C++赋值运算符的左值(lvalue)和右值(rvalue)
左值 (lvalue, locator value) 表示了一个占据内存中某个可识别的位置(也就是一个地址)的对象,左值可以被操作。
右值(rvalue)表示了一个非内存可识别对象的值,不能被操作。
左值和右值的说法常在错误信息中出现。