C语言中static关键字的神奇之处

首先介绍static关键字

static翻译成汉语是:静止的;不变的,在C语言中主要有三个作用

1.static修饰局部变量

static修饰局部变量的作用是是数据保持的更久一些,同时static修饰的局部变量的存储区是在静态存储区的,被static修饰的变量可以称之为静态变量,若在定义是不显示的对它进行初始化,则编译器会对它隐式的初始化为0(全局变量也是相同的),它的生命周期是从定义开始处一直到程序运行结束,比如说下面的程序:

<span style="font-size:18px;">#include<stdio.h>
#include<stdlib.h>
int main()
{
	static int a;     //声明静态变量a没有显示的初始化 所以编译器会隐式的初始化为0
	static int b = 10;    //声明静态变量b,它和a一样在静态存储区存储,生命周期在程序结束处
	int c = 20;  //普通变量  执行到这一步才会在栈区开辟空间进行初始化
	printf("a=%d\nb=%d\nc=%d\n", a, b, c);
	system("pause");
	return 0;
}</span>

程序运行结果是:




2.static修饰全局变量

3.static修饰函数

static修饰全局变量和函数的时候的作用是一致的,就是修改连接属性,对于全局部变量和函数的声明默认的是具有外部连接属性的,就是通过extern关键字可以在别的文件中使用,但是如果static修饰了全局变量或者函数,那么它的连接属性就会变为内部连接属性,即就是只能在本源文件中使用,别的源文件不能使用它们。举个例子

#include<stdio.h>
#include<stdlib.h>
static int d = 10;    //声明全局静态变量
int e = 10;
static void fun1()      //函数用static修饰
{
	printf("this is an example\n");
}
void fun2()
{
	;
}
int main()
{
	return 0;
}

现在有一个源文件是a.c其中声明了静态全局变量 static int  d=10和static修饰的函数fun1(),如果想在另一个源文件中b.c使用,通过extern是不能办到的,因为它的连接属性已经被修改为内部链接属性。但是在b.c中可以在通过

extern int e = 10;

extern void fun2();

在b.c中就可以使用它们了,因为它们的连接属性是外部的。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值