全局变量是C语言语法和语义中一个很重要的知识点。全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。

首先全局变量的存在意义需要从三个不同角度去理解:

对于程序员来说,它是一个记录内容的变量(variable);

对于编译/链接器来说,它是一个需要解析的符号(symbol);

对于计算机来说,它可能是具有地址的一块内存(memory),一般存储在程序的data段中,因此它的生命期才会那么长。

其次是语法/语义:

从作用域上看,带static关键字的全局变量范围只能限定在文件里,否则会外联到整个模块和项目中;

从生存期来看,它是静态的,贯穿整个程序或模块运行期间(注意,正是跨单元访问和持续生存周期这两个特点使得全局变量往往成为一段受攻击代码的突破口,了解这一点十分重要);

从空间分配上看,定义且初始化的全局变量在编译时在数据段(.data)分配空间,定义但未初始化的全局变量暂存(tentative definition)在.bss段,编译时自动清零,而仅仅是声明的全局变量只能算个符号,寄存在编译器的符号表内,不会分配空间,直到链接或者运行时再重定向到相应的地址上。

在函数中使用全局变量,一般应作全局变量说明。只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。例如:

int a,b; /* 外部变量 */

void f1()

{

/* …… */

}

float x,y; /* 外部变量 */

int fz()

{

/* …… */

}

main()

{

/* …… */

}

从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x、y 定义在函数f1之后,而在f1内又无对x、y的说明,所以它们在f1内无效。a、b定义在源程序最前面,因此在f1、f2及main内不加说明也可使用。

又比如:输入正方体的长宽高l、w、h。求体积及三个面x*y、x*z、y*z的面积。

int s1,s2,s3;

int vs( int a,int b,int c)

{

int v;

v=a*b*c;

s1=a*b;

s2=b*c;

s3=a*c;

return v;

}

main()

{

int v,l,w,h;

printf("\ninput length,width and height(split by blank)\n");

scanf("%d%d%d",&l,&w,&h);

v=vs(l,w,h);

printf("\nv=%d,s1=%d,s2=%d,s3=%d\n",v,s1,s2,s3);

}

外部变量与局部变量同名:

int a=3, b=5; /* a,b为外部变量 */

max(int a,int b) /* a,b为外部变量 */

{

int c;

c=a>b ? a : b;

return(c);

}

main()

{

int a=8;

printf("%d\n",max(a,b));

}

如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。所以上面的程序输出8,而不是5。

c语言自动变量全局变量,C语言全局变量的一些简单介绍相关推荐

  1. c语言递归函数变量作用域,C语言课程变量的作用域和生存周期、递归.ppt

    C语言课程变量的作用域和生存周期.递归 函数的定义和函数的调用 函数定义格式: 返回值类型 函数名(类型 参数1,类型 参数2,-) { 函数体 return 表达式; } 函数调用格式: 函数名(参 ...

  2. c il语言 定义变量,[转载]Skill语言入门

    第一章SKILL 语言基础 1.1 SKILL 语言简介 SKILL 是用于Cadence 软件二次开发的语言.我们关于SKILL 的介绍基于SKILL 语言参考档和Allegro SKILL的应用. ...

  3. c语言指针变量字节,C语言指针变量类型和大小

    指针变量作为C语言中的特殊数据类型,除了用于存储内存地址之外,它与其他类型比较是否具有其他特点呢?接下来对指针类型进行分析,剖析指针类型的特点. 指针的大小与其指向的内存中存储的变量类型无关,它只与计 ...

  4. C语言数据类型 / 变量类型 - C语言零基础入门教程

    目录 一.C 语言数据类型分类 二.C 语言整形 1.无符号整形(16 位系统) 2.有符号整形(16 位系统) 3.int 和 long 区别 4.超出取值范围的整形 三.C 语言浮点型 float ...

  5. c语言查看变量类型_c语言外部链接的静态变量的四种类型

    体系结构计划 外部链接的静态变量具有文件作用域.外部链接和静态存储期.该类别有时称为外部存储类别(external storage class),属于该类别的变量称为外部变量(external var ...

  6. c语言自动变量与静态变量,C语言的中的静态变量和局部变量(自动变量)

    #include int a=1; int f(int c) { static int a=2; c=c+1; return (a++)+c; } int main() { int i,k=0; fo ...

  7. python语言的变量类型_Python语言变量类型基础学习

    本文主要向大家介绍了Python语言变量类型基础学习,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. Python基本语法1.定义常量: 之前定义变量没有一起介绍定义常量,是因为P ...

  8. c语言取变量数据类型,C语言数据类型和变量

    <C语言数据类型和变量>由会员分享,可在线阅读,更多相关<C语言数据类型和变量(75页珍藏版)>请在人人文库网上搜索. 1.第3章C数据类型和变量,学习目的和要求: 掌握数据类 ...

  9. c语言布尔变量定义,C语言布尔类型介绍 C语言标准(C89)没有定义布尔类型,如果你使用true...

    10的叠乘值为 3628800 输出结果为: //导入 stdbool.h 来使用布尔类型#include #include //计算n!,n的值在main中定义int main(void){ int ...

  10. c语言自动安装软件,(c语言)电脑控制手机,手机端不需要安装软件

    编译环境 devc++(需要下载) ege图形库(需要自己配置到devc++) adb指令(已提供在tool文件夹下) 手机端要打开手机调试 主要原理 利用adb的input指令,使用c语言 演示图 ...

最新文章

  1. 装服务器的时候卡在复制文件,子域无法安装,卡在复制架构目录分区
  2. python3 ssl.CertificateError: hostname manifest.googlevideo.com doesn t match either
  3. 学习OCS客户端定制
  4. 【老孙随笔】项目经理要如何看待技术?
  5. loadrunner参数化excel数据
  6. [html] 如何垂直居中<img>?
  7. thymeleaf 基础教程-搭建杂货铺项目环境(一)
  8. 2021永州高中高考成绩查询入口,邵阳高考成绩查询入口2021
  9. 机器学习十大算法简介
  10. Week 10 homework
  11. win7win8 64位汇编开发环境合集安装与设置
  12. 自动驾驶横向控制 LQR 算法推导及仿真学习笔记
  13. OpenCL优化案例研究 (4)
  14. Java程序编译及打包
  15. HTML+CSS奥运五环
  16. Linux显示2015年日历表
  17. Python简单版本flappy_bird
  18. java 模拟天眼查登陆,scrapy,我想模拟登陆天眼查网站,那个网站要滑动对齐验证,我能怎么办才能模拟登陆成功呢?...
  19. 什么是冒泡,怎么阻止冒泡,冒泡排序
  20. 【通信协议】一文搞懂SPI

热门文章

  1. 将sql server 2000的备份文件导入到sql server 2012中
  2. 超酷汇编教程-- 简明x86汇编语言教程(1)
  3. python爬虫百度地图_Python抓取百度地图的数据
  4. 网页设计收藏站 80 个
  5. msql--基础使用
  6. Spring核心功能--总汇
  7. 正则表达式提取身份证号码
  8. 小程序源码:王者荣耀战力查询微信小程序源码下载支持安卓苹果微信QQ等多区查询
  9. Cadance 进行LOGO 制作
  10. 谷歌浏览器导入插件教程