一,变量
一,变量的类型与基本操作
变量是由C++有效类型创建申请的一块存储区域的名称,它的存储区域大小由类型决定,比如 int类型的大小是4个字节,那么系统就会为int类型创建的变量申请4个字节的内存变量,可以 用来存储这个范围的数据。可以通过运算来进行操作。此时值得注意的是,单精度类型(float)占四个字节,其中第1位是符号位,中间8位是指数位,后23位是小数位。双精度类型(double)则是第1位是符号位,中间11位是指数位,后面52位是小数位。
变量的名称由字母、数字和下划线字符组成。它必须以字母或下划线开头,且区分大小写,因为 C++ 是大小写敏感的。变量名只是一个标识符,不占用内存,在编译时转换成变量的地址存放在寄存器中。
变量的声明:
变量类型 变量名;
可以在创建时用=进行初始化,也可以在后面赋值。
这里引入左值和右值的概念,左值是是一个地址值,可以用来改变里面的数据,所以可以用来被赋值,放在赋值符号的右边。当然左值也可以放在赋值符号的右边,用来取地址里的值。右值是一个符号或者常量,会在编译时复制地址里面的数据到寄存器中。
需要主义的是C/C++并非安全性的语言,在对变量进行操作时有发生数据溢出的情况,溢出分为两种:
上溢:即两个正数相加的结果是负数;
下溢:即两个负数相加的结果为正数;
发生数据溢出的情况是由于在对数据进行操作时,符号位与数据是一起计算的,所以数据进位到符号位改变了符号位的值便发生了溢出现象。计算机对数据溢出根据数据类型采用截断的方式处理。
二,变量的作用域
通常我们可以在三个地方定义变量,所以变量的前缀也有所区别:
-
局部变量,在一个函数内部或者一片代码块中定义的变量;
-
形式参数变量,即在函数定义时作为参数被定义的变量;
- 全局变量,在所有函数外部定义的变量;
函数参数不必多说,局部变量则是只在他的定义的函数域或代码域里起作用,全局变量的作用域是整个程序,即所有的源文件。在申请变量是如果没有初始化,系统会默认初始化为0。如果在函数内部定义一个与全局变量同名的变量,这个函数中会使用这个局部变量的值。
局部变量的值存储在动态存储区,全局变量的值存储在静态存储区。
二,常量
常量在就是程序执行中不可以改变的量,它可以是任意的基本数据类型,常量只能在定义的时候初始化。
一般我们用两种方法来定义常量:
- 使用 #define 预处理器。
- 使用 const 关键字。
#define是在预编译的时候起作用,它会在遇到我们定义的宏用宏里面的内容来直接替换(此时要注意代码里的其他修饰符以免出错)。同时我们也可以用宏来实现一些简单的运算。下面定义一个简单的宏。
#define PI 3.1415926
const 实在程序运行时起作用,在定义变量时前缀加上const便可以把它变成常量。例如:
const int i;
#define和const给有优缺点
- define是一个常量值,并不带数据类型,而const是带类型的;
- 由于#define是在预编译阶段起作用,它也不能进行调试。
- const不能重定义,而#define可以通过#undef取消某个符号的定义进行定义。
- define可以用来防止头文件重复引用,而const不能。
- const会为常量申请空间,#define只在代码区占空间。