您的位置:首页 > 编程语言 > C语言/C++

C语言--变量存储类型

2011-01-05 14:32 295 查看
C语言的变量存储类型分为:   1  静态存储 分为外部变量(extern)和静态变量(static)。   (1)  静态变量
    在变量定义时,就分配存储单元并一直保持不变,直至整个程序结束。
    格式:
    static 数据类型 变量名
    静态变量在退出其作用域之后,依然保留其储存空间,即使所在函数调用结束也不释放,也就是说任何函数对静态变量直接起作用。
    在定义时可以按下面的格式对静态变量进行初始化:
    static 类型 变量名=常量;
    例如:
    static int a=1;
    static char a[]=”This is a text”;
 
实例1 同名异值
/*同名异值*/
#include <stdio.h>

int f();
main(){
int a,s;   /*此处定义的s是一个函数级局部变量*/
printf("    同名异值/n/n");
s=100;
printf("在函数main()中,执行循环语句前,s=%d/n",s);
for(a=1;a<5;a++){
static int s=10;   /*此处定义的s是一个语句级静态变量*/
printf("在函数main()中,第%d次循环时,s=%d/n",a,s);
}
}


静态变量在程序运行中会一直保留其存储空间,如果程序中定义过多的静态变量(尤其是静态数组),则有可能会引起内存空间不足。

(2) 外部变量

    外部变量是在函数外部定义的变量,即全局变量,如果需要在多个程序之间进行变量的引用,就需要外部变量。

    外部变量的格式说明如下:

    extern 数据类型 变量名;

    说明:外部变量仅能定义一次,即只能分配一次存储空间,如果重复定义变量,则程序编译时会报错。

/*文件tc1.c*/
int a;  /*定义外部变量a*/
int f();
main(){
...
a=1;    /*调用外部变量a*/
m=f();
}

/*文件tc2.c*/
extern int a;  /*说明a为外部变量*/
f(){
...
a++;
...
}


tc1.c和tc2.c是2个不同的程序文件,但它们都使用同一个变量a,变量a被定义为外部变量,在文件tc1.c中被定义,而在文件tc2.c中只是说明a是外部变量。

 

使用关键字extern扩展变量作用域:

int f();
main(){
extern int a;  /*说明外部变量a*/
...
a=1;    /*调用外部变量*/
m=f();
}

int a;    /*定义外部变量a*/
int f(){
...
a++;    /*调用外部变量*/
...
}


在上面的程序段中,外部变量a是在main()函数之后进行定义的,如果要在main()中进行调用,则需要在main()中使用语句

"extern int a" 说明a是一个外部变量,否则如果使用"int a",那么得到的只是一个局部变量。

  2  动态存储

分为自动变量(auto)和寄存器变量(register)。

(1) 动态变量(自动变量auto)

    在程序执行过程中,需要使用才给它分配存储单元,使用完后立即释放。

    动态变量的定义格式如下:

    auto 数据类型 变量名;   /*关键字auto可以省略*/

    平时我们见到的形参以及块内变量都是动态变量。

(2) 寄存器变量

    变量的值都是存储在内存中的,有些变量可能会大量使用(例如for中的循环变量),为了提高执行效率,C语言允许将变量的值存放到CPU的寄存器中,叫做寄存器变量。

寄存器变量定义格式如下:

register 数据类型 变量名;

main(){
int a;
register int i;
for(i=1;i<1000;i++){
a+=i;
}
printf("%d",a);
}


只有局部变量才能定义成寄存器变量,寄存器变量能够定义的数量有限,一般以2,3个为宜,

由于寄存器变量不在内存中,因此不能进行地址运算,最好是使用时定义寄存器变量,使用完后立刻释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: