在C 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2025-09-30
什么是变量的“作用域”?打个比方,每个变量好比一盏灯,能照亮的区域就是它的“作用域”,在该区域内的任何地方都能“看到”它,自然也就能访问到该变量;出了这个区域就访问不到了,因为“看不到了”。
程序中的每个“变量灯”的“功率”大小不一,因此它们的作用域就不相同了。在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,这种变量的有效范围称变量的作用域。不仅形参变量,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()内都有效,不加说明也可使用。(https://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 语言中,具有一定功能、相对独立的程序段称为函数。无论主函数main()位于程序中的什么位置,程序执行时总是从main()开始。C 语言程序的一般结构如图5.1 所示。它具有以下特点:图5.1C 程序中的函数C 语言允许一个程序由多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。一个C 程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。......
2025-09-30
图4.18程序运行结果设有3 个学生的4 门课成绩,求每个学生4 门课程的总评成绩、3 个学生每门课程的平均成绩。图4.19程序运行结果挑战节目主持人。图4.20程序运行结果联合国排名是以国家名的英文字母排序,社会上也常以姓氏的汉语拼音字母排序。就这样,用字符数组min 依次与新输入的字符串比较,直到输入字符串为空时为止。图4.21程序运行结果......
2025-09-30
在一个C 程序中,有且只能有一个名为main 的函数,该函数称为主函数。程序执行始终是始于主函数,结束于主函数。C 程序中的每个语句都是以分号(;)作为语句结束符的。......
2025-09-30
但是允许在一个函数的定义中出现对另一个函数的调用,即函数的嵌套调用。图5.9函数嵌套调用与子程序嵌套类似,是在执行主函数main()中调用函数a()的语句时,转去执行函数a();在函数a()中调用函数b()时,转去执行函数b();在函数b()执行完毕,返回函数a()的继续执行;函数a()执行完毕,返回主函数main()。函数嵌套调用举例。图5.11程序运行结果统计一批数据中大于平均值的数据总数。图5.12程序运行结果......
2025-09-30
鉴于目前各种计算机系统的C 语言都一致把这类标识符作为固定的库函数或预编译处理中的专门命令使用,因此,为了避免误解,建议用户不要把这类预定义标识符另作他用。用户标识符的命名有以下命名规则,符合规则的命名是合法的,反之,命名是不合法的。......
2025-09-30
首先数组元素可以作为实参,其用法与变量完全相同。图5.5程序运行结果说明:用数组名作函数参数,应该在主调函数和被调用函数分别定义数组,例中array 是形参数组名,score 是实参数组名,分别在其所在函数中定义,不能只在一方定义。图5.8程序运行结果用数组名作为函数参数时应注意以下几点:形参数组和实参数组的类型必须一致。......
2025-09-30
switch 语句是多分支选择语句。程序运行结果:说明:例3.12 中出现了break 语句,在C 语言中,可以利用break 语句终止该语句下面所有case 子句和default 子句的执行,直接跳出switch 语句。......
2025-09-30
相关推荐