局部变量和全局变量
局部变量:分为普通局部变量和静态局部变量。是在函数内部定义的变量
全局变量:分为普通全局变量和静态全局变量。在函数外部定义的变量,尽量少用,不安全,生命周期太长
总观:
详述:
静态变量的生命周期
void Fun()
{
int a=0;
a++;
printf("%d\n",a);//输出10个1
}
void Fun1()
{
static int b=0;//静态局部变量,函数退出不销毁
b++;
printf("%d\n",b);//输出1,2,3,4,5,6,7,8,9,10
}
int main()
{
for(int i=0;i<10;i++)
{
Fun();
}
printf("----------------------------------\n");
for(int i=0;i<10;i++)
{
Fun1();
}
return 0;
}
主函数中调用Fun()函数,输出结果为10个1,函数调用完成后,会释放函数所占用的空间,a变量的空间也随之释放,当再次调用Fun函数时,重新创建a,所以打印出的a值均相同。调用Fun1()时,由于函数中的a加上了static静态关键字,所以a的空间不释放,当第二次调用Fun1()函数时,继续使用第一次创建的a值,打印出的结果为1,2,3,4,5,6,7,8,9,10。
默认值的测试
静态变量和全局变量的默认值是0,普通局部变量是随机值
static int a;//0
int b;//0
int main()
{
static int c;//0
int d;//error,为赋初值
printf("%d %d %d\n",a,b,c);
return 0;
}
运行结果: 0 0 0
链接属性的测试
同一工程中,其他文件中的声明:
int g_x=100;//其他文件可以使用
static g_y=200;//内部使用,其他文件不可使用
同一工程中的另外一个文件代码:
extern int g_x;//引用外部变量g_x
extern int g_y;
int g_a=20;
int g_b;
static int g_sa;
int main()
{
printf("%d,%d\n",g_b,g_sa);
g_x=0;//g_x可修改
printf("%d\n",g_x);
printf("%d\n",g_y);//链接出现错误
return 0;
}
不加静态关键字static,可以被同一项目中的其他文件通过extern引用,也可以对其值进行改变,不安全。如果加上static静态关键字,则不能被外界引用,保证了数据的安全性。
函数:普通函数:static:C中static主要用来修饰函数
创建temp.h头文件,头文件是用来存放函数的声明的,里面输入:
int Max(int a,int b);
创建temp.cpp的c++文件,在文件里面输入:
int Max(int a,int b)//对外部公开
{
return a>b?a:b;
}
int Min(int a,int b)//内部函数,不公开,不放在头文件中
{
return a<b?a:b;
}
创建main.cpp的c++文件,在文件里写入:
#include<stdio.h>//<>用来引用库中的头文件
#include "temp.h"//""用来引用本项目中的头文件
extern int Min(int a,int b);
int main()
{
Max(10,100);
Min(10,100);
return 0;
}
在main函数中调用Max函数时,因为Max函数已经在头文件中声明,所以可以直接调用,输出正确的值。
调用Min函数时:1.直接在主函数中调用,不在头文件中声明,则函数在链接时出现错误 2.通过使用 extern int Min(int a,int b); 语句,可以正确执行Min函数 3.当在Min函数定义时,加上static静态关键字,则Min函数变为文件私有,不能被其他文件使用。
下一篇: ,如果过滤最前面一个小数点