为了把信息存储在计算机中,并随时可以读取,程序必须记录以下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.h
extern 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.h
class 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中调用;

定义和调用时要用类范围符限定;