目录
1、static修饰局部变量
2、static修饰全局变量
3、static修饰函数
static在C语言中是用来修饰变量和函数的
static修饰局部变量—称为静态局部变量
static修饰全局变量—称为静态全局变量
static修饰的函数—称为静态函数
1、static修饰局部变量
//代码1
#include <stdio.h>
int main()
{
int i;
for(i=0;i<5;i++)
{
int sum = 1;
sum++;
printf("%d\t",sum);
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int i;
for(i=0;i<5;i++)
{
static int sum = 1;//static修饰局部变量sum
sum++;
printf("%d\t",sum);
}
return 0;
}
代码1运行结果:
代码2运行结果:
static修饰局部变量后,改变了什么?
(1)、从运行结果上看出static修饰局部变量时,改变了局部变量的生命周期,变量的生命周期被延长。
(2)、从存储位置上看,普通的局部变量存储在栈区,被static修饰后变为静态局部变量,存储在.data或者.bss段。
2、static修饰全局变量
//源文件1.c
#include <stdio.h>
int a = 10; //在1.c中定义两个全局变量a和b
int b = 20;
//源文件2.c
#include <stdio.h>
extern int a; //extern引用1.c中的变量a,b
extern int b;
int main()
{
int c = a + b;
printf("%d\n",c);
return 0;
}
源文件2.c最终运行结果为30;
如果将源文件1.c的全局变量前加上static
//源文件1.c改
#include <stdio.h>
static int a = 10; //在1.c中定义两个全局变量a和b
static int b = 20;
源文件2.c将报错,无法连接到源文件1.c的静态全局变量。
作用:当static修饰全局变量时,这个全局变量将不能被其他源文件引用,为了数据安全。
static修饰全局变量后,改变了什么?
改变了其变量的作用域,使这个全局变量只能在自己所在的源文件内部使用。
3、static修饰函数
//源文件1.c
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
//源文件2.c
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int sum = Add(a,b);
printf("%d\n",sum);
return 0;
}
源文件2.c最终运行结果为30;
如果将源文件1.c的函数前加上static
//源文件1.c改
#include <stdio.h>
static int Add(int x, int y)
{
return x+y;
}
源文件2.c将报错,无法连接到源文件1.c的函数。
static修饰函数后,结果同修饰全局变量一样,修改了函数的作用域,使这个函数只能在1.c的源文件内使用。