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

转载 2017年01月03日 17:27:00

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

变量的声明有两种情况:

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("静态全局变量:%d\n",staticGlobalVariable);

}


main.c文件如下:

#include <stdio.h>

#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++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm

读C++ Primer 之构造函数陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm

读C++ Primer 之智能指针 http://www.linuxidc.com/Linux/2011-08/40177.htm

读C++ Primer 之句柄类 http://www.linuxidc.com/Linux/2011-08/40175.htm

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

  1. Linux-C成长之路(一):Linux下C编程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成长之路(二):基本数据类型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成长之路(三):基本IO函数操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成长之路(四):运算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成长之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成长之路(六):函数要义 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成长之路(七):数组与指针 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成长之路(八):存储类,动态内存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成长之路(九):复合数据类型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成长之路(十):其他高级议题

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-08/105600.htm

相关文章推荐

C语言 常量、变量

在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据、图片数据、视频数据,还有聊QQ时产生的文字数据、用迅雷下载的文件数据等。这讲我们就来介绍C语言中数据的处理。 一、数据的存储 ...

C语言之变量本质总结

 变量 变量的概念及本质: 变量命名规则: 标示符: 1、程序中用于标识常量、变量、函数的字符序列。 2、只能由字母、数字、下划线组成 3、第一个字母必须...

【C语言】C语言外部变量和内部变量

目录: 【外部变量】 · 定义 · 用extern修饰变量 【内部变量】 · 定义 · 用static修饰变量 1.外部变量 · 定义 定义的变量能被本文件和其它...

C语言中变量的存储类别及其存储方式

(一)AUTO auto----自动变量,动态存储方式 auto是C语言中局部变量的默认属性 编译器默认所有的局部变量 auo变量存储在程序的栈中,默认属性 特点: (1) 自动变...

c语言基本数据类型short、int、long、char、float、double

1.概述   C 语言包含的数据类型如下图所示 2.各种数据类型介绍 2.1整型   整形包括短整型、整形和长整形。 2.1.1短整形   shor...

C语言系列(一)基本数据类型

C语言helloworld1.声明头文件,相当于java的导包。 //只有函数的声明,编译时会去找到函数的实现 #include 2.写main()方法 main(){ ...

C语言基础:C语言变量类型 - 全局变量和局部变量

前言 何为变量? 在我们之前学到的知识里面, 定义过很多变量, 比如int 变量, double变量, long变量, 这些都是属于变量, 这次我们所说的知识是在这些变量的基础上再添加一些知识, 那...

C语言中,变量的存储类型有几种?

在C语言中,对变量的存储类型说明有以下四种:         auto          自动变量         register     寄存器变量         extern       外部...
  • JYS_MMU
  • JYS_MMU
  • 2016年04月04日 17:40
  • 2317

C语言(变量的定义和类型的本质)

学习编程开发的一个非常重要的概念是:一定要理解任何变量、函数原则上都是一块块大小各异的内存,而类型则是我们和系统对这块内存含义的约定。   拓展: 很多初学者对变量的定义理解模糊,比...

c语言-数据类型-构造类型

利用计算机存处理单一的数据是比较容易,比如一个人的某一科成绩,直接创建一个变量存储相应的分数就可以了,但是要同时处理多个科目的时候,这时候就有点麻烦了,同时创建多个变量存储多个科目这样子显得有点奇怪不...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言之变量类型和存储方式
举报原因:
原因补充:

(最多只允许输入30个字)