任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:

在函数或块内部的局部变量

在所有函数外部的全局变量

在形式参数的函数参数定义中

让我们来看看什么是局部变量、全局变量和形式参数。

局部变量

在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,所有的变量 a、b 和 c 是 main() 函数的局部变量。

#include

int main ()

{

/* 局部变量声明 */

int a, b;

int c;

/* 实际初始化 */

a = 10;

b = 20;

c = a + b;

printf ("value of a = %d, b = %d and c = %dn", a, b, c);

return 0;

}

全局变量

全局变量是定义在函数外部,通常是在程序的顶部。全局变量在整个程序生命周期内都是有效的,在任意的函数内部能访问全局变量。

全局变量可以被任何函数访问。也就是说,全局变量在声明后整个程序中都是可用的。下面是使用全局变量和局部变量的实例:

#include

/* 全局变量声明 */

int g;

int main ()

{

/* 局部变量声明 */

int a, b;

/* 实际初始化 */

a = 10;

b = 20;

g = a + b;

printf ("value of a = %d, b = %d and g = %dn", a, b, g);

return 0;

}

在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:

#include

/* 全局变量声明 */

int g = 20;

int main ()

{

/* 局部变量声明 */

int g = 10;

printf ("value of g = %dn", g);

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

value of g = 10

形式参数

函数的参数,形式参数,被当作该函数内的局部变量,它们会优先覆盖全局变量。下面是一个实例:

#include

/* 全局变量声明 */

int a = 20;

int main ()

{

/* 在主函数中的局部变量声明 */

int a = 10;

int b = 20;

int c = 0;

printf ("value of a in main() = %dn", a);

c = sum( a, b);

printf ("value of c in main() = %dn", c);

return 0;

}

/* 添加两个整数的函数 */

int sum(int a, int b)

{

printf ("value of a in sum() = %dn", a);

printf ("value of b in sum() = %dn", b);

return a + b;

}

当上面的代码被编译和执行时,它会产生下列结果:

value of a in main() = 10

value of a in sum() = 10

value of b in sum() = 20

value of c in main() = 30

初始化局部变量和全局变量

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动对其初始化,如下所示: 数据类型初始化默认值

int0

char'\0'

float0

double0

pointerNULL

正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果,因为未初始化的变量会导致一些在内存位置中已经可用的垃圾值。

c 语言名称的作用域,C 作用域规则相关推荐

  1. Python语言编程之LEGB变量作用域法则

    Python 在查找"名称"时,是按照 LEGB 规则查找的: Local-->Enclosed-->Global-->Built in Local    指的就 ...

  2. Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...

    Python Day 10  函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal) 名称空间(命名空间): 当程序运行时,代码从上至下一次读取,遇到变量与值, ...

  3. C语言中将外部变量的作用域扩展到其他文件

    C语言中将外部变量的作用域扩展到其他文件 1.外部变量的定义 外部变量是在函数的外部定义的全局变量.全局变量都是存放在静态存储区中,因而它的生存期是固定的,存在于程序的整个运行过程. 2.外部变量的作 ...

  4. Javascript的作用域,作用域链,闭包

    1,作用域和作用域链概念 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.1 全局作用域,在代码 ...

  5. 一木.溪桥学Python-09:函数的返回值、函数的作用域、作用域的优先级、递归函数、内置文件中常用方法、匿名函数lambda、高阶函数

    一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-09:函数的返回值.作用域.作用域的优先级.递归函数.内置文件中常用方法.匿名 ...

  6. 图解Javascript——作用域、作用域链、闭包

    什么是作用域? 作用域是一种规则,在代码编译阶段就确定了,规定了变量与函数的可被访问的范围.全局变量拥有全局作用域,局部变量则拥有局部作用域. js是一种没有块级作用域的语言(包括if.for等语句的 ...

  7. Atom飞行手册翻译: 4.3 作用域设置、作用域和作用域描述符

    作用域设置.作用域和作用域描述符 Atom支持语言特定的设置.你可以在Markdown文件中软换行,或者在Python中把tab的宽度设置为4. 语言特定的设置只是一些东西的子集,我们把它叫做&quo ...

  8. 【07】JavaScript:05-作用域、变量的作用域、作用域链、预解析、对象

    文章目录 JavaScript基础第05天笔记 1 - 作用域 1.1 作用域概述 1.2 全局作用域 1.3 局部作用域 1.4 JS没有块级作用域 2 - 变量的作用域 3 - 作用域链 4 - ...

  9. JS 作用域和作用域链

    作用域 JavaScript 中的作用域是我们可以有效访问变量或函数的区域.作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript 有两种类型的作用域:全局作用域.局 ...

  10. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

最新文章

  1. 合工大建筑和计算机专业哪个好,合肥工业大学最好的专业是什么(10大热门专业排名)...
  2. socket设置超时时间 SO_RCVTIMEO和SO_SNDTIMEO
  3. 【JSOI2008】最大数 线段树
  4. Java 并发编程之同步工具类栅栏 CyclicBarrier
  5. 针对灰鸽子声明 金山“四问”灰鸽子工作室
  6. JavaScript基础---字符串方法
  7. Emacs进阶之选择当前word/line
  8. jquery radio,select相关操作
  9. Java程序设计(面向对象)- 基本概念
  10. 自动驾驶常用传感器介绍
  11. 这8个坏习惯加重体内湿气,一定要改掉!否则……
  12. java计算机毕业设计交通规则考试系统源码+mysql数据库+系统+lw文档+部署
  13. response.sendRedirect()的用法
  14. 学神经网络需要什么基础,深度神经网络怎么用
  15. 鸿蒙系统有通知服务器吗,鸿蒙系统通知栏怎么清除和打开?鸿蒙系统没有下拉菜单怎么回事?...
  16. tplink错误代码51215_tplink升级提示错误代码18000导致升级不成功解决办法
  17. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho
  18. 51Nod-1355-斐波那契的最小公倍数
  19. 3D打印制造技术 原理
  20. 如何批量将Word转换成PDF?这几种方法都可以实现批量转换

热门文章

  1. C# WinForm开发系列 - TextBox
  2. 操作系统——CPU、计算机的构成
  3. 使用docker commit 来扩展一个image
  4. MSSQL WITH (NOLOCK) 脏读
  5. uniSWF使用注意事项
  6. 36.Silverlight中播放视频和打印文档【附带源码实例】
  7. 数据库SQL优化大总结之 百万级数据库优化方案(转)
  8. Java秒杀系统优化的工程要点
  9. 以太主义的创始人维塔利克·布特林(Vitalik嫩模 Butlin)被称为“V神”
  10. 程序员职业生涯全攻略,附神级跳槽攻略图