设为首页 加入收藏

TOP

C语言之变量类型和存储方式
2014-11-23 21:36:07 来源: 作者: 【 】 浏览:11
Tags:语言 变量 类型 存储 方式

变量可以分为全局变量、静态全局变量、局部变量和静态局部变量


变量的声明有两种情况:


1、一种是需要建立存储空间的(定义性声明)。例如int a 在生命的时候就已经建立了存储空间。


2、另一种是不需要建立存储空间的(引用性声明)。例如extern int a 其中变量a是在别的文件中定义的。


内存区域的划分:


1、栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值、局部变量等。


2、堆区:程序员向系统申请或释放。


3、全局区:用来保存全局变量和静态变量。


4、文字常量区:用来保存常量字符串的内存区域。


5、程序代码区:用来保存函数体的二进制代码。


先看一个例子:


fileOne.h头文件如下:


#ifndef DMTestVariable_fileOne_h


#define DMTestVariable_fileOne_h



// 声明全局变量


extern int globalVariable;



void addOne();


void testStaticGlobal();



#endif



fileOne.c文件如下


#include


#include "fileOne.h"



// 静态全局变量


static int staticGlobalVariable = 12;



void addOne()


{


// 全局变量加1


globalVariable += 1;


}



void testStaticGlobal()


{


// 静态全局变量加1


staticGlobalVariable += 1;


printf("静态全局变量:%d\n",staticGlobalVariable);


}



main.c文件如下:


#include


#include "fileOne.h"



// 定义性声明全局变量


int globalVariable = 10;


void test()


{


// 静态局部变量


static int staticLocalVariable = 20;


staticLocalVariable += 1;


printf("静态局部变量值:%d\n",staticLocalVariable);


}



int main(int argc, const char * argv[])


{


// 局部变量测试


int localVariable = 15;


printf("局部变量%d\n",localVariable);



// 全局变量测试


addOne();


printf("全局变量:%d\n",globalVariable);



// 静态局部变量的测试


for (int i = 0 ; i < 2; i++) {


test();


}



// 静态全局变量


for (int i = 0 ; i < 2; i++) {


testStaticGlobal();


}


return 0;


}



输出结果如下:


C语言之变量类型和存储方式


总结如下:


全局变量,具有全局作用域,只需在一个源文件中定义,就可以作用于所有的源文件,当然其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量,如代码中的


// 定义性声明全局变量


int globalVariable = 10;



全局变量,定义在main.c源文件中,在fileOne.c源文件中使用时有以下代码再次声明


// 声明全局变量


extern int globalVariable;


静态全局变量,只能在其所在文件模块中的函数中使用,其他文件模块中的函数不能访问。如代码中的


// 静态全局变量


static int staticGlobalVariable = 12;



只能在fileOne.c源文件中使用,不能在main.c源文件中使用。


局部变量:只能在定义该变量的函数体内使用。如代码中的


// 局部变量测试


int localVariable = 15;


只能在main函数中使用。


静态局部变量:在函数内定义,但当函数退出后,静态局部变量始终存在,其占用的内存单元不会被释放,直到程序结束时才被释放。退出函数后尽管该静态局部变量还存在,但是不能使用它,如果再次调用定义该静态局部变量的函数,它又可以继续使用,而且保存了上次调用之后留下的值。如代码中的


// 静态局部变量


static int staticLocalVariable = 20;



第一次调用test()函数输出的此静态局部变量值为21,第二次调用函数test()输出的此静态局部变量值为22。


C语言梳理一下,分布在以下10个章节中:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇使用 Python 在 Linux 上实现一键.. 下一篇Python 发送Email的几种方式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: