一 全局变量
- 定义:在函数外部声明的变量,属于整个程序的"全局范围"
- 作用域:从声明位置到文件末尾
- 跨函数访问:无需传递参数,其后的任意函数可直接使用
二 局部变量
- 定义:在函数内或代码块({})中声明的变量,作用域仅限于所在函数或代码块
- 特点:
- 作用域有限
- 内存动态分配:存在栈区,函数调用时创建,结束后自动释放内存
- 默认值不确定:未初始化时值为随机数(垃圾值),需手动赋值.
三 外部变量
- 本质:通过extern声明其它文件中已定义的全局变量,实现跨文件共享
- 声明:需要用extern(不分配内存,仅引用),依赖全局变量定义
- 注意:全局变量只能在一个文件中定义,其它文件用extern声明
四 全局变量实战开发
- 题目:班上有10个学生,封装一个函数,调用该函后获得班上的平均分、最高分、最低分
- 代码示例
#include <stdio.h>
//定义全局变量
int MaxScore;
int MinScore;
//封装函数
float GetResult(int arr[],int len)
{
int i;
int SumScores=0;
MaxScore=MinScore=arr[0];
for(i=0;i<len;i++)
{
if(MaxScore<arr[i])
{
MaxScore=arr[i];
}
if (MinScore>arr[i])
{
MinScore=arr[i];
}
SumScores+=arr[i];
}
return (float)SumScores/len;
}
//主函数
int main()
{
int scores[10]={88,72,95,68,70,77,91,63,89,76};
float AvgScore;
AvgScore=GetResult(scores,sizeof(scores)/sizeof(scores[0]));
printf("该班级的平均分是:%.2f\n最高分是:%d\nz最低分是:%d",AvgScore,MaxScore,MinScore);
return 0;
}
- 输出结果
- 报错总结
这两种初始化方法都是错误的,第一种会使最小值为0;第二种会使总分多加了arr[0],从而使平均值增大;
正确的应该这样: