局部变量的作用域被限定在它们所定义的范围之内。局部变量在函数调用时的特征示例。图5.11全局变量与局部变量作用域重叠示意图在这种全局变量与局部变量作用域重叠的情况下,当程序的控制流程进入这个作用域重叠区域时必须要确定应该使用哪一个同名的变量。......
2023-11-20
什么是变量的“作用域”?打个比方,每个变量好比一盏灯,能照亮的区域就是它的“作用域”,在该区域内的任何地方都能“看到”它,自然也就能访问到该变量;出了这个区域就访问不到了,因为“看不到了”。
程序中的每个“变量灯”的“功率”大小不一,因此它们的作用域就不相同了。在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,这种变量的有效范围称变量的作用域。不仅形参变量,C语言中所有的变量都有自己的作用域。变量说明的方式不同,其作用域也不同。从作用域的角度看,可以将变量分为“局部变量”和“全局变量”。
1.局部变量
局部变量也称为内部变量,是在函数内部定义说明的。其作用域仅限于函数内, 离开该函数就不能再使用了。例如:
上面有两个函数,从中可以看到:
在函数f1 内定义了三个变量,a 为形参,b 和c 为一般变量。在 f1 的范围内a、b、c 有效。m、n 的作用域限于main()函数内。
(1)主函数main()中定义的局部变量,也只能在主函数中使用,其他函数不能使用。同时,主函数中也不能使用其他函数中定义的局部变量。因为主函数也是一个函数,与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
(2)形参变量也是局部变量,属于被调用函数;实参变量,则是调用函数的内部变量。
(3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会混淆。
(4)在复合语句中也可定义变量,其作用域只在复合语句范围内。
例如:
2.全局变量
如果说局部变量是一盏只能照射到局部区域的“灯”,那么全局变量就是一盏能照射到整个程序的“灯”,因此,程序中的任何地方都能访问到全局变量。
在C 语言程序中,是以文件为单位进行编译的,在一个源程序文件中,也就是函数外部定义的变量称为全局变量,也称为外部变量,其作用域是从定义该变量的位置开始到程序结束。全局变量不属于哪一个函数,而属于一个源程序文件。在函数中使用全局变量,一般要作全局变量说明。只有在函数内经过说明的全局变量才能使用。但是在一个函数之前定义的全局变量,在该函数内使用时可不再说明。例如:
从以上可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x、y 定义在函数f1()之后,而在f1()内又没有对x、y 说明,所以它们在f1()内无效。a、b 定义在源程序第一行,因此在函数f1()、f2()及主函数main()内都有效,不加说明也可使用。(www.chuimin.cn)
说明:
(1)外部变量可加强函数模块之间的数据联系,但又因此使得这些函数的独立性降低。从模块化程序设计的观点来看有些不利,因此可尽量少用外部变量。
(2)在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。
(3)对于局部变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和说明并不是一回事。外部变量定义必须在所有的函数之外,且只能定义一次。
一般格式:
其中方括号内的extern 可以省去不写。
例如:
等效于:
外部变量的作用域是从定义点到本源程序文件结束。如果定义点之前的函数需要引用这些外部变量,需在函数内对被引用的外部变量进行说明。外部变量说明的一般格式:
(4)外部变量的作用域是从定义位置到本源文件结束。如果定义位置之前的函数需要引用这些变量时,需在函数内对被引用的外部变量进行说明。引用外部变量说明语句格式:
(5)外部变量在定义时就已分配了内存单元,外部变量定义可作初始赋值,外部变量声明不能再赋初始值,只是表明在函数内要使用某外部变量。
(6)外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的说明,出现在要使用该外部变量的函数内,而且可以出现多次。
【例5.15】外部变量的定义与说明。
外部变量在最后定义,因此在前面函数中对要用的外部变量必须进行说明。外部变量xl,xw 和函数vs()的形参xl,xw 同名。外部变量都作了初始赋值,主函数main()中也对xl 作了初始化赋值。执行程序时,在printf()语句中调用vs()函数,实参xl 的值应为main()中定义的值5,外部变量xl 在main()内不起作用;实参xw 的值为外部变量xw 的值4,进入vs()后这两个值传送给形参xl,函数vs()中使用的xh 为外部变量,其值为5,因此v 的计算结果为100,返回主函数后输出。
有关C语言程序设计实用教程的文章
局部变量的作用域被限定在它们所定义的范围之内。局部变量在函数调用时的特征示例。图5.11全局变量与局部变量作用域重叠示意图在这种全局变量与局部变量作用域重叠的情况下,当程序的控制流程进入这个作用域重叠区域时必须要确定应该使用哪一个同名的变量。......
2023-11-20
在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2023-10-21
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
程序在编译时将每一个变量名对应一个地址,在内存中不再出现变量名,而只有地址。对变量值的存取通过地址进行,访问方式通常有两种。直接利用变量地址进行存取。在例6.1 中,当系统执行输入语句scanf时,根据变量i 与地址的对应关系,找到变量i 的起始地址2011,然后把键盘输入的数值存入&i 所指示的单元中。变量i在内存中的地址和数值,如图6.1 所示。这里,指针变量只能存放地址,而不能存放其他数据。......
2023-10-21
④如何限制某一源程序文件中定义的变量在同一C程序的其他源程序文件中的使用。变量的作用域和生存期是两个相互联系而又有本质区别的不同概念,它们的基本意义如下:①一个变量在某个复合语句、某个函数、某个源程序文件或某几个源程序文件范围内是有效的,则称其有效的范围为该变量的作用域,在此范围内可以访问或引用该变量。......
2023-11-20
在一个C 程序中,有且只能有一个名为main 的函数,该函数称为主函数。程序执行始终是始于主函数,结束于主函数。C 程序中的每个语句都是以分号(;)作为语句结束符的。......
2023-10-21
在C 语言程序中,是通过对函数的调用来执行函数体,其过程与子程序调用相似。在调用函数时,大多数情况下主调函数和被调函数之间有数据传递。图5.2程序运行结果函数调用在程序中起一个表达式或者语句的作用。在调用函数时,有3 种不同的方式。这就要求该函数必须是有返回值的。getchar 函数调用作为表达式使用,即赋值表达式的右操作。......
2023-10-21
一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。有了结构体指针变量,就能方便地访问结构体变量的各个成员。下面通过例子来说明结构体指针变量的具体说明和使用方法。图7.6程序运行结果说明:程序定义了一个结构stu,定义了stu 类型结构体变量boy1,并初始化赋值,还定义了一个指向stu 类型结构的指针变量pstu。......
2023-10-21
相关推荐