为了把信息存储在计算机中,并随时可以读取,程序必须记录以下3个基本属性。
1 信息存放的位置;
2 要存储的值;
3 信息类型;
如,定义一个整型变量,可以通过以下语句实现
int MyBalls ;
MyBalls = 5 ;
这两行语句说明,程序存储了一个信息类型为整型的变量,其值是5,并且存储在代号为MyBalls的变量中。但在这两行语句中,并不能体现这个值为“5”的整型存储的内存地址,事实上,程序是将这一切都安排好了的。使用“&MyBalls”命令即可查看MyBalls所在的内存地址。
根据变量分配的存储空间的不变,可以分为:
1 自动变量:
auto:位于内存中动态存储区,局部变量+形参
2 静态变量:包括全局变量,局部变量也可以定义为静态的(如果需要在两次函数调用之间保持上一次函数调用结果,可以使用局部变量);
static:位于内存中静态存储区,
3 寄存器变量:局部变量也可以定义到寄存器中,只限于int,char,pointer变量,如果寄存器饱和时,将自动转换为自动变量;
register:如果有一些变量使用频繁,则为存取变量的值要花费不少时间。为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量,用关键字register作声明。
局部变量:局部变量+静态局部变量+寄存器变量;形参可以定义为自动变量或寄存器变量
全局变量:外部变量+静态外部变量;
动态存储变量:自动变量+寄存器变量+形参;
静态存储变量:静态局部变量+静态外部变量+外部变量
外部变量:函数之外定义的变量称为外部变量。外部变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。所以也称全程变量。
不必要时不要使用全局变量,原因如下:
① 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。
② 使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。
③降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把C程序中的函数做成一个封闭体,除了可以通过“实参——形参”的渠道与外界发生联系外,没有其他渠道。
变量名实际上是对应代表一个地址,在编译时由编译系统给每一个变量名分配对应的内存地址;
从变量存在的时间来区分,有动态存储和静态存储两种类型。静态存储是程序整个运行时间都存在,而动态存储则是在调用函数时临时分配单元。
动态存储 :自动变量、寄存器变量、形式参数。
静态存储:态局部变量、静态外部变量、外部变量。
从变量值存放的位置来区分,可分为:
内存中静态存储区:静态局部变量、静态外部变量、外部变量。
内存中动态存储区:自动变量和形式参数。
CPU中的寄存器:寄存器变量。
static定义全局变量
定义全局变量的传统方式
Object.hextern int number;Object.cpp
int number = 1;main.cpp
#include <stdio.h> #include "Object.h" int main() { pringf("number:%d\n", number); return 0; }
定义全局变量的static方式
Object.hclass Object { public: static int number; };Object.cpp
#include "Object.h" int Object::number = 1;main.cpp
#include <stdio.h> #include "Object.h" int main() { Object::number = 2; pringf("number:%d\n", number); return 0; }
全局函数类似全局变量的操作;
声明在头文件,定义在cpp文件,在其它文件如main.cpp中调用;
定义和调用时要用类范围符限定;