美文网首页C语言&嵌入式C语言
C语言编程新手入门基础:变量的作用域

C语言编程新手入门基础:变量的作用域

作者: 小辰带你看世界 | 来源:发表于2018-01-22 14:34 被阅读1次

在这一节中我们来学习一下关于变量的作用域。在前面的课程中我们已经知道如何定义变量,并对其赋值和计算,但并没有对其作用域做额外的说明。其实,我们定义的变量并不会一直有效,它只会在其作用域内有效,并在其作用域外失效。

一、局部变量

      我们最先是在main函数内部定义了一些变量并使用它们,例如:

int main(int argc, char *argv[])

{

int a;

int b;

int c;

//do something

return 0;

}

      像这样在函数(并非只有main函数,所有函数都一样内部的变量被称为局部变量,它们的作用域就是当前函数内部。也就是说,这些变量只能在其内部使用,而不能在函数外部使用。

      同样的结构化语句if else、while、do while、for、switch等,这些结构内部也可以定义变量,例如:

if (is_true)

{

int a;

int b;

//do something

}

else

{

int c;

int d;

//do something

}

while (is_true)

{

int a;

int b;

//do something

}

for (int i = 0; i < 10; i++)

{

int a;

int b;

//do something

}

switch (val)

{

case 1:

{

int a;

int b;

//do something

break;

}

case 1:

{

int a;

int b;

//do something

break;

}

default:

{

int a;

int b;

//do something

break;

}

}

      这些在结构化语句的内部的变量的作用域为结构化语句内部。注意,对于switch中在case内部定义的变量的作用域就是在当前case。我们可以简单理解为在大括号内部定义的变量,其作用域就是在当前大括号中,在当前大括号外部无效。对于循环嵌套和分支嵌套程序来说都是一样的。关于这一点不再赘述。

      注意,当一个嵌套结构中出现两个不同作用域的变量时,变量的名称可以相同,在使用时以其小作用域为准。例如:

int main(int argc, char *argv[])

{

int a;

int b;

//do something

for (int i = 0; i < 10; i++)

{

int a;

int b;

//do something

if (i == 4)

{

int a;

int b;

//do something

}

}

//do something

return 0;

}

      这样的程序是合法的。但在使用这些不同作用域下的同名变量时要格外注意他们的作用域。所以我们建议读者在定义变量时不要将它们定义为相同的名称。

二、全局变量

      与局部变量相对的就是全局变量,我们把定义在函数外部的变量称为全局变量,这些变量的作用域为整个程序,也就是说所有的函数和结构化语句都可以使用他们,例如

/* a.c */

int a;

int b;

int afunc(void)

{

  a = 2;

  b = a;

//do somethine

return 0;

}

      另外,在上一节中我们已经学习了如何进行多个源文件一起编译,那么全局变量在其它文件中是否也生效呢?答案是肯定的。当我们在a.c文件中定义了一个全局的变量i,而在另一个源文件b.c中是无法直接使用这个变量的,我们需要使用extern关键字在函数外部声明一个文件外部变量

/* b.c */

extern int a;

extern int b;

int bfunc(void)

{

  a = 2;

  b = a;

  //do somethine

  return 0;

}

      这样就可以在b.c中使用a.c中定义的变量了。注意extern int a;和extern int b;只是告诉编译器,在当前文件中需要使用当前文件外部的全局变量,而不是定义这些新变量。当然,这些变量在b.c中也是全局的。

相关文章

  • 升华:编程语言再学习基础概要

    编程语言基础概要 作用域词法作用域(也称为静态作用域),即变量的作用域在定义时确定。作用域范围由变量所处代码块(大...

  • GeekBand极客班C++面向对象高级编程(上)第一周笔记

    1.c++编程简介 所需基础知识 . 某种编程语言: 变量、类型、作用域、循环、流程控制 . 编译、连结建立可执行...

  • C语言编程新手入门基础:变量的作用域

    在这一节中我们来学习一下关于变量的作用域。在前面的课程中我们已经知道如何定义变量,并对其赋值和计算,但并没有对其作...

  • C语言基础教程之变量作用域

    警告,变量已死亡,C语言基础教程之变量作用域 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出...

  • js函数作用域

    js的变量作用域是函数级的,在js里没有类似c语言的块级作用域。 js编程环境的顶级作用域是window对象下的范...

  • C语言之内存讲解

    1 内存讲解 1.1 作用域 C语言变量的作用域分为:代码块、函数、文件作用域: 1.1.1 局部变量 局部变量(...

  • JavaScript基础:作用域、作用域链和闭包

    作用域的理解 JavaScript的作用域有两种:全局变量和局部变量。不过有一点需要注意,在类C编程语言中,花括号...

  • 作用域

    何为作用域 任何编程语言都有作用域的概念,简单来说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可...

  • js - 12 JS作用域和作用域链

    作用域 在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可...

  • 什么是作用域

    概念:任何编程语言都有作用域的概念,简单来说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和...

网友评论

    本文标题:C语言编程新手入门基础:变量的作用域

    本文链接:https://www.haomeiwen.com/subject/nrvlaxtx.html