c语言建立全局变量,C语言全局变量和局部变量
引子---
变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。从空间角度来看,变量可以分为全局变量和局部变量,而从时间角度来分的 可以有静态存储变量和动态存储变量之分。
一。全局变量和局部变量
1。局部变量
他是指在函数内部定义的变量 作用域为定义局部变量的函数 也就是说他只能在定义他的函数中使用
最值得注意的是 只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失
eg.
func (){
intx; 局部变量x的作用域 很明确
}
2。全局变量
在程序执行的过程中一直有效
eg.
intx=1;
func (){
x=x+1;
}
func1 ()
{
x=x-1;
}
main ()
{
}
由此不难看出整型x的作用范围
对于全局变量 如果在定义的时候不做初始化 则系统将自动为起赋值 数值型为0
字符型为空'\0'
全局变量的弊端 增加内存开销 降低函数的通用性
定义全局变量时 理想的位置是在文件的开头 当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时 在函数内部对该变量使用extern 加以说明 说明他是外部的
(这里还要做详细的讲解)
eg.
main ()
{
externinta,b;
printf ("mIn is %d\n",min(a,b));
}
inta=1,b=2;
intmin (x,y)
intx,y;
{
intz;
z=x
return(z);
}
我还要说明的是 对外部变量的说明和对全局变量的定义不是一回事
对外部变量的说明 只是声明该变量是在外部定义过的一个全局变量 在这里引用 而对全局变量的定义则是要对起分配存储单元的
一个全局变量只能定义一次 可是却可以多次引用
*** 在同一源文件中,全局变量和局部变量同名时,在局部变量的作用域内,全局变量不起作用的。
二。静态存储变量和动态存储变量
对于程序运行期间根据需要进行临时动态分配存储空间的变量 为动态存储变量
对于那些程序运行期间永久占用固定内存的变量 称为静态存储变量
还要说明的是 程序的指令代码是存放在程序代码区的 静态存储变量是存放在静态数据区的 包括全局变量等 而程序中的动态存储变量存放在动态数据区 如函数的形参以及函数调用时的返回地址等
三。C语言中的变量存储分类指定
auto
auto称为自动变量 如果函数不做其他说明的话 均为自动变量
static
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全程变量
Turbo C2.0允许将大型程序分成若干独立模块文件分别编译, 然后将所有模块的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用, 而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。
extern
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用extern来说明。
eg.
文件1为file1.c
inti, j;/*定义全程变量*/
charc;
voidfunc1(intk);
main()
{
func1(20);/*调用函数*/
func2();
}
func1(intk)/*用户定义函数*/
{
j=k*100;
}
文件2为file2.c
externinti, j;/*说明将i, j从文件1中复制过来*/
externcharc;/*将c复制过来*/
func2() /*用户定义函数*/
{
staticfloatk;/*定义静态变量*/
i=j*5/100;
k=i/1.5;
}
对于以上两个文件file1.c和file2.c, 用Turbo C2.0的集成开发环境进行编译连接时, 首先应建立一个.prj的文件。例如file.prj, 该文件内容如下:
file1.c
file2.c
然后将file.prj的文件名写入主菜单Project中的Project Name项中。 再用F9编译连接, 就可产生一个文件名为fioe.exe的可执行文件。
register
register称为寄存器变量。它只能用于整型和字符型变量。定义符register说明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。
另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量, 因此, 不能用作全程变量。定义一个整型寄存器变量可写成:
register int a;
(零下六度)
c语言建立全局变量,C语言全局变量和局部变量相关推荐
- c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...
基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...
- C语言 全局变量 - C语言零基础入门教程
目录 一.全局变量简介 二.全局变量使用 三.全局变量使用注意事项 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.全局变量简介 在所 ...
- 【C语言局部变量/静态局部变量/全局变量与静态全局变量
1基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...
- C语言全局变量(c文件和h文件中的全局变量、静态全局变量)使用注意事项
C语言在头文件中包含全局变量有三种形式: 1 在头文件中声明一个全局变量,在一个C文件中定义全局变量,然后在所有的引用了这个头文件的C文件里都可以使用该全局变量值. 如在main.c定义 int a ...
- C语言函数(函数嵌套、递归调用)+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+内部函数外部函数
上一篇文章:编译预处理知识点梳理:宏定义+文件包含+条件编译 C语言函数(函数嵌套.递归调用--+局部变量和全局变量+extern关键字的使用+Visual Studio简单的使用教程+数据存储类别+ ...
- c语言局部变量 静态局部变量 全局变量与静态全局变量
基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...
- c语言头文件可以定义全局变量,C语言在头文件中定义全局变量
C语言在头文件中定义全局变量 头文件定义全局变量等问题 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定 ...
- c语言 引用定义变量,如何在c语言中定义及引用全局变量?
如何在c语言中定义及引用全局变量? 答案:5 信息版本:手机版 解决时间 2019-10-03 10:30 已解决 2019-10-02 15:19 如何在c语言中定义及引用全局变量? 最佳答案 2 ...
- c语言字面量的作用是为变量,C语言(五) C 全局变量,局部变量,静态变量和常量...
一. 全局变量 全局变量是在所有函数体的外部定义的,程序的所有部分(其他文件的代码)都可以使用.全局变量不受作用域的影响.全局变量的生命周期一直到程序的结束,全局变量是静态存储方式. 例: #incl ...
- c语言使用循环下落方块,C语言 俄罗斯方块的实现1 全局变量
全局变量 简而言之,定义在函数外的变量,就是全局变量. 所有的函数都可以引用和修改全局变量(共享). 全局变量被分配在内存的全局区域,可以调试看地址验证. 基础问题: 可否有两个同名的全局变量(不可以 ...
最新文章
- 深度学习LiDAR定位:L3-Net
- secureCRT常用设置
- 计算机二级考数组吗,数组-Java语言程序设计重要笔记 计算机二级考试
- 《剑指offer》构建乘积数组
- 前端jQuery基本语法
- html中a标签根据一个参数跳转不同的页面
- luogu3413 萌数
- 你们的前端是怎么入门的?(并且找到工作)?
- 基于asp.net sql社区物业管理系统毕业设计网站
- Php程序监控邮件提醒linux,Linux ping命令实现网络监控 并邮件提醒管理员
- 从零开始学习区块链(1)
- 关于Matlab的MEX技术 10分钟教会你简单的matlab和C/C++混合编程(mex文件)
- matlab2016 win10,新手,win10电脑上面装matlab2016a还是b好呢?64位操作系统
- turtlebot运动控制问题(不用键盘控制,自己写控制节点控制地盘)
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
- 同一个图表创建双坐标轴,显示多个图例
- 设计模式之设配器模式、外观模式
- cdp4j The status code of the opening handshake response is not ‘101 Switching Protocols‘
- 程序化随机多边形地图生成
- 用Python自动生成数据日报!