欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

局部变量和全局变量

程序员文章站 2024-01-26 08:54:41
...

局部变量:分为普通局部变量和静态局部变量。是在函数内部定义的变量
全局变量:分为普通全局变量和静态全局变量。在函数外部定义的变量,尽量少用,不安全,生命周期太长

总观:
局部变量和全局变量
详述:
静态变量的生命周期

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函数变为文件私有,不能被其他文件使用。