一.全局变量:定义在函数外部的变量;
生命周期:程序开始时创建和程序结束时销毁。
作用域: 定义变量的开始直到结束。
默认值: 在全局(静态)变量区为0。
链接属性:外部。
例:在min.cpp中定义全局变量 int a=10;
若在max.cpp中调用a,使用extern(引用外部符号) int a就能声明全局变量a,然后就可以使用a
二. 静态全局变量
与全局变量的区别:加static(静态,值可以变,主要用于修饰函数)
生命周期:程序开始时创建和程序结束时销毁。
作用域: 定义变量的开始直到结束。
默认值: 在全局(静态)变量区为0。
链接属性:内部。
例:在min.cpp中定义全局变量 static int a=10;
若在max.cpp中调用a,即使使用extern(引用外部符号) , 在max.cpp中也不能使用int a=10.
三.局部变量:定义在函数内部的变量,包括形参。
生命周期:进入函数时创建,退出函数时销毁
作用域: 本函数内部有效。
默认值: 随机值。
内存区域:栈里面
链接属性: 无。
eg:
# include<stdio.h>
void Fun()
{
int a = 0;
a++;
printf("%d\n",a);
}
int main()
{
for(int i=0;i<10;i++)
{
Fun();
}
return 0;
}
运行结果:
四:静态局部变量:定义在函数内部的变量,包括形参。
生命周期:进入函数时创建,程序结束时销毁
作用域: 无
默认值: 0
内存区域:全局变量区
链接属性: 无。
static int a=0;//第一次进入才执行
eg:
# include<stdio.h>
void Fun()
{
static int a = 0;
a++;
printf("%d\n",a);
}
int main()
{
for(int i=0;i<10;i++)
{
Fun();
}
return 0;
}
运行结果:
五:动态内存
生命周期:创建动态内存时创建,调运动态内存释放函数时销毁
默认值 : 无
内存区域:堆(内存泄漏)
链接属性: 无
#include <stdio.h>
#include<stdlib.h>
int * Fun()
{
int *p=(int *)calloc(10,sizeof(int)); //申请动态内存
return p;
}
int main()
{
int *p=Fun();
p[3]=1;
for(int i=0;i<10;i++)
{
printf(" %d ",p[i]);
}
free(p); //释放动态内存
return 0;
}
运行结果:
六. 函数:外部函数和内部函数
内存区域:在代码段
链接属性 : 无static 外部
有static 内部
eg:
在max.h中存放Max函数的声明, 在主函数页添加max.h头文件便可使用Max函数.如果若在Max函数前添加static,即使使用extern 声明Max函数也无法使用Max函数。