备注:1、文章中的例子暂时为空,日后希望自己能自己编写例子赋贴上来。

一、角度分析:

变量作用域 -------> 局部变量和全局变量

变量存在的生存期 ---------> 静态存储方式和动态存储方式

二、局部变量:

局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内,离开函数后再使用这种变量是非法的。

例子:

关于局部变量的作用域还要说明以下几点:

1)主函数也是一个函数,它与其他函数是平行关系。主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。同时,主函数中也不能使用其他函数中定义的变量。

2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。

3)在不同函数中可以使用相同的变量名,它们代表不同的对象,编译器分配不同的单元,互不干扰。

4)在复合语句中定义的变量其作用域只能在复合语句范围内。

例子:

三、全局变量

全局变量也称为外部变量,是在函数外语定义的变量。它不属于哪一个函数,它属于一个源程序文件(所以只要是在同一个源程序文件,那么就可以利用这个变量进行赋值或其他操作)。其作用域是整个源程序(如何理解这里的“源程序”)。在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明附为:extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。

例如:

三、变量的存储方式

用户存储空间可以分为三个部分:

程序区
静态存储区(在程序运行期间分配固定的存取空间的方式。)

动态存储区(在程序运行期间根据需要进行动态的分配存储空间的方式。)

动态存储区存放一下数据:

1)函数形式参数;

2)自动变量(未加static声明的局部变量);

3)函数调用实的现场保护和返回地址;

对以上这些数据,在函数开始调用时分配动态存续空间,函数结束时释放这些空间。

在c语言中,每个变量和函数有两个属性:数据类型和数据存储类别。

1、auto变量:

函数中的局部变量,如不专门声明为 static 存储类别,都是动态地分配存储空间的,数
据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变
量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释
放这些存储空间。这类局部变量称为自动变量。自动变量用关键字 auto 作存储类别的声明。
例如:
int f(int a) /*定义 f 函数,a 为参数*/
{auto int b,c=3; /*定义 b,c 自动变量*/
……
}
a 是形参,b,c 是自动变量,对 c 赋初值 3。执行完 f 函数后,自动释放 a,b,c 所占
的存储单元。
关键字 auto 可以省略,auto 不写则隐含定为“自动存储类别”,属于动态存储方式。

2、用static声明局部变量

有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。

例如:

f(int a)

{

  auto b=0;

  static c=3;

b=b+1;

c=c+1;

return(a+b+c);

}

main()

{

  int a=2, i;

for(i=0;i<3;i++)

  printf("%d",f(a));

对静态局部变量的说明:

1)静态局部变量数据静态存储类别,在静态存储区分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。

2)静态局部变量在编译时赋初始值,即只赋初始值一次;而对自动变量赋初始值是在函数调用进行,没调用一次函数重新给一次初值,相当于执行一次赋值语句。

3)如果在定义局部变量时不赋初始值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定值。

例如:

3、用extern声明外部变量

外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限与定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量做“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。

}

额外链接:

1、全局变量与局部变量在内存中的区别详细解析  http://www.jb51.net/article/42012.htm

-----------------

Hayder

E:hayder-su@qq.com

2015-4-26

转载于:https://www.cnblogs.com/Hayder/p/4458737.html

C语言之局部变量全局变量变量存储方式相关推荐

  1. C语言中结构体内存存储方式

    C语言中结构体内存存储方式 结构体的默认存储方式采用以最大字节元素字节数对其方式进行对齐,例如一个结构体中定义有char.int类型元素,则结构体存储空间按照int类型占用字节,如果还有double类 ...

  2. 消失的字符串——c语言函数中的数据存储方式以及字符串实现

    2019独角兽企业重金招聘Python工程师标准>>> 事情是这样的,最近在学习翁老师的Mooc之C语言程序设计,插一句,真的是好老师,讲的真的太好了,在c里的字符串这里,翁老师演示 ...

  3. 用字典存储学生成绩查询_C语言 | 用结构体变量存储学生信息

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  4. php 变量源码,PHP源码中变量存储方式

    PHP是动态类型语言,是使用静态类型的C语言编写的.PHP的类型系统是Zend引擎实现的. 在Zend/zend.h文件中,有如下代码,定义了一些结构体: typedef union _zvalue_ ...

  5. C语言变量的存储方式和生存期

    一.动态存储方式与静态存储方式 从变量的作用域进行区分,变量可分为全局变量和局部变量. 从变量的生存期进行区分,变量可分为静态存储方式和动态存储方式. 静态存储方式:在程序运行期间由系统分配固定的存储 ...

  6. iOS开发系列--C语言之存储方式和作用域

    概述 基本上每种语言都要讨论这个话题,C语言也不例外,因为只有你完全了解每个变量或函数存储方式.作用范围和销毁时间才可能正确的使用这门语言.今天将着重介绍C语言中变量作用范围.存储方式.生命周期.作用 ...

  7. C语言里的4种存储类别,C语言中变量储存的类别

    C语言中变量储存的类别 C语言根据变量的生存周期来划分,可以划分为静态存储方式和动态存储方式. C语言中变量储存的类别 静态存储方式:是指在程序的运行期间分配固定的存储空间的方式.静态存储区中存储放了 ...

  8. C语言中的 static变量、static函数

    Static variable & function 1.Static variable 2.静态局部变量(static local variable) 3.静态全局变量(static glo ...

  9. C语言中的 static变量(全局和局部)、static函数总结

    简介: C语言中的 static变量(全局和局部).static函数总结 文章目录 本博文的简述or解决问题? 同步博文: static 变量: 静态局部变量: 静态全局变量: static 函数-. ...

最新文章

  1. 竞赛比完,代码、模型怎么处理?Kaggle 大神:别删,这都是宝藏
  2. mongodb 安装pymongo 驱动
  3. Linux:终端自定义title
  4. C#如何在钉钉开发平台中创建部门
  5. linux 根据ip查机器名
  6. 常用的C#正则表达式!
  7. Windows上面挂载NFS共享
  8. python程序中想使用正则表达式_如何在python中使用正则表达式提取每行中需要的信息...
  9. .net core webapi 文件上传在 Swagger 文档中的有好提示处理
  10. MSSQL 读取本地文件数据
  11. mysql乘法函数_数据库入门(MySQL):mySQL运算符与mySQL常用函数
  12. 程序员 写作_如何经常写作可以使您成为更好的程序员
  13. 英雄联盟服务器状态在线怎么解决,解决英雄联盟无法连接到服务器的方法 看完就明白了...
  14. web audio api 实现音频播放
  15. 3、浙江移动网页Post登陆分析RSA算法【Post/Js逆向笔记】
  16. 分布式事务框架lcn入门demo
  17. 盈一眸恬淡,在明媚的春天等你
  18. 【ESP系列】ESP8266-12F
  19. 连载:面向对象葵花宝典:思想、技巧与实践(10) - “抽象” 详解
  20. [debug004]_GPIO对地短路问题

热门文章

  1. 50个精美的 PSD 用户界面素材和设计模板资源
  2. 爬出数据标注陷阱,半监督学习模型暗藏多少玄机?
  3. ECCV 2020 论文大盘点—显著目标检测篇
  4. 大幅减少GPU显存占用:可逆残差网络(The Reversible Residual Network)
  5. 自动特征工程、NAS、超参调优和模型压缩,微软开源的NNI一库搞定!
  6. CVPR 2019 Oral 亮风台提出端到端投影光学补偿算法,代码已开源
  7. CVPR 2019 Oral | 华科开源效果超群的人体姿态迁移算法
  8. 开源 | CVPR 2021无需向量监督的矢量图生成算法
  9. CVPR2021 Oral|只用静态图,实时渲染出丝滑3D效果
  10. 收藏 | 计算机视觉四大基本任务(分类、定位、检测、分割)