变量
概念
指值可以变的量。
原理
在C和C++中,变量用来标识一块内存区域,非new申请的变量标识的内存区域在栈区,栈区既可读也可写,所以叫做变量。
常量
概念
不变化的量。
原理
分为两种,第一种为const常量,第二种为define常量。
const:
const常量本质上是常变量。
对于全局常量,它们存储在全局区的常量区中,这个区是完全只读的区域,但是如果一定要修改也不是不行。对于局部常量,它们存储在栈区中,栈区是可读可写的区域,但如果试图直接修改局部常量就会报编译错误。如果编译器不会检查指针变量是否指向的是常量,那就可以用指针变量指向常量后修改常量。我用的dev-c++会禁止指针变量指向常量,只允许常量指针指向常量。
define:
define常量是真常量。
define能达到的最终结果是把用到的常量变成像1,2,3,4,5这样的真常量。在预编译阶段,如果代码中用到了define定义常量的标识符,就把标识符替换成常量,在编译阶段直接用这个常量编译。
静态变量
概念
在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。
其实就是从程序开始时分配内存,在程序结束时释放内存的变量,在此期间,该内存不会出现访问权限的变动。静态变量只能作用在声明静态变量的源文件之内,所以全局静态变量和全局变量在只有一个源文件的情况下作用是相同的。局部静态变量和局部变量的作用域相同,但是程序不结束就不会释放内存。
全局静态变量的作用是:使变量在一个源文件内得以独立存在,解决多个源文件间变量名相同的问题;局部静态变量的作用是:在函数体内写一个静态变量,可以避免函数执行完之后系统自动清理变量,在下一次使用函数时保持上一次的值,使代码可读性提高并且更为严谨。(真正写代码的时候感觉静态变量并没有什么卵用ฅ^._.^ฅ)
全局静态变量的作用很好理解,主要是局部静态变量的作用需要演示:
以下代码:
#include <iostream>
using namespace std;
void plus1()
{
int a=0;
a++;
cout<<a<<" ";
return ;
}
int main()
{
for(int i=1;i<=5;i++)
plus1();
return 0;
}
输出为:1 1 1 1 1
但是如果把plus1中的a改为整型的局部静态变量:
static int a=0;
输出就变成了:1 2 3 4 5
全局变量
概念
全局变量是相对于局部变量的概念,而无论全局变量还是局部变量都是指值可以变的量。但它们的作用域不同,生命周期也不同。全局变量从程序开始运行时开始生命周期,在程序结束时结束生命周期,它的作用域为全局作用域;存放在栈中的局部变量从声明时开始生命周期,在函数结束运行时结束生命周期,它的作用域为定义局部变量的函数。