加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

C语言之变量类型和存储办法

发布时间:2021-11-20 13:55:00 所属栏目:教程 来源:互联网
导读:变量可以分为全局变量、静态全局变量、局部变量和静态局部变量 变量的声明有两种情况: 1、一种是需要建立存储空间的(定义性声明)。例如int a 在生命的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的(引用性声明)。例如extern int a 其中变

变量可以分为全局变量、静态全局变量、局部变量和静态局部变量
 
变量的声明有两种情况:
 
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 <stdio.h>
 
#include "fileOne.h"
 
 
 
// 静态全局变量
 
static int staticGlobalVariable = 12;
 
 
 
void addOne()
 
{
 
    // 全局变量加1
 
    globalVariable += 1;
 
}
 
 
 
void testStaticGlobal()
 
{
 
    // 静态全局变量加1
 
    staticGlobalVariable += 1;
 
    printf("静态全局变量:%dn",staticGlobalVariable);
 
}
 
 
main.c文件如下:
 
#include <stdio.h>
 
#include "fileOne.h"
 
 
 
// 定义性声明全局变量
 
int globalVariable = 10;
 
void test()
 
{
 
    // 静态局部变量
 
    static int staticLocalVariable = 20;
 
    staticLocalVariable += 1;
 
    printf("静态局部变量值:%dn",staticLocalVariable);
 
}
 
 
 
int main(int argc, const char * argv[])
 
{
 
    // 局部变量测试
 
    int localVariable = 15;
 
    printf("局部变量%dn",localVariable);
 
   
 
    // 全局变量测试
 
    addOne();
 
    printf("全局变量:%dn",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。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读