函数、变量都有其存储类型和作用域。
(一)函数
函数的存储类型:extern(外部函数)、static(内部、静态函数)
函数的作用域:当函数存储类型为extern 时,函数能被所有编译单位使用;
当函数存储类型为static 时,函数只限于某一个编译单位使用。
指明存储类型的函数定义的一般形式:
[存储类型] 函数返回类型 函数名(形参列表)
{
函数体;
}
函数的存储类型默认为extern 。
(二)变量
变量的作用域:局部变量、全局变量。
1.局部变量:在函数内定义并使用,仅限主函数main()中使用,在其它函数中不能调用。
同时允许在不同函数使用相同的变量名,它们代表不同的对象,分配不同的
单元,互不干扰。
2.全局变量:在函数外部定义的变量,其作用域是整个源程序文件,各个函数均可使用。
全局变量定义的一般形式:
[extern] 类型说明符 变量名1[= 初始值1], 变量名2[=初始值2],…;
方括号内extern可以省略,变量如果不赋初始值,则默认初始值为0。
全局变量可加强函数模块间的数据联系,但又使函数要依赖全局变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这点是不利的,因此尽量不要使用全局变量。
//定义全局变量的演示
输入10个学生的成绩,求出最高分。将其中变量都定义为全局变量。
求最高分功能用自定义函数array_max实现。
#include<stdio.h>
double max; //定义全局变量,最高分max
double a[10]; //定义全局变量,存放10个学生的成绩a[10]
int i = 0;
void array_max(int n) //函数定义
{
max = a[0];
for (i = 0; i < n; i++)
{
if (max < a[i]) max = a[i];
}
}
int main()
{
printf("请输入10位学生的成绩:");
for (i = 0; i < 10; i++)
{
scanf_s("%lf", &a[i]);
}
array_max(10); //函数引用
printf("最高分为:%.2lf", max);
return 0;
}