静态关键字static

静态关键字static

C语言中,static关键字修饰变量和函数
1、局部变量
2、全局变量
3、函数

修饰局部变量

1、用静态关键字static修饰的局部变量,在编译的过程中,会在数据区为该变量开辟空间,并对其进行初始化,如果代码中未对其进行初始化,则系统默认初始化为0

2、用static修饰的局部变量,会延长局部变量的寿命,超出函数的生存期

3、对静态关键字修饰的局部变量的初始化

以下面两个变量a和变量为b进行说明,在编译过程中,发现变量a和b是静态变量,会标识变量a与b,等到程序运行的时候,在主函数调用之前,对变量a和变量b分配空间,并对变量a进行初始化,由于变量b是由函数fun传递的参数进行初始化的,故会在程序调用函数时对变量b进行初始化,对变量b初始化之前,会检查变量b的标识位,如果标识位为0,就会拿函数参数x对其进行初始化,标识位为1就不进行初始化

static int a = 0;(编译过程进行初始化)
static int b = x;(运行该代码的时候进行初始化)

void fun(int x)
{
	static int a = 10;
	static int b = x;
	a++;
	b++;
}
//反汇编
    51: 	static int a = 10;
    52: 	static int b = x;
00C91A48  mov         eax,dword ptr ds:[00C9A194h]  
00C91A4D  mov         ecx,dword ptr fs:[0000002Ch]  
00C91A54  mov         edx,dword ptr [ecx+eax*4]  
00C91A57  mov         eax,dword ptr ds:[00C9A154h]  
00C91A5C  cmp         eax,dword ptr [edx+00000104h]  
00C91A62  jle         00C91A8F  
00C91A64  push        0C9A154h  
00C91A69  call        00C910E1  
00C91A6E  add         esp,4  
00C91A71  cmp         dword ptr ds:[00C9A154h],0FFFFFFFFh  
00C91A78  jne         00C91A8F  
00C91A7A  mov         eax,dword ptr [ebp+8]  
00C91A7D  mov         dword ptr ds:[00C9A150h],eax  
00C91A82  push        0C9A154h  
00C91A87  call        00C91172  
00C91A8C  add         esp,4  

修饰全局变量变量

用静态关键字static修饰全局变量的意义、

可见性不一样,加上静态关键字后,只对当前文件有效,对其他文件无效,并且有效区间从定义位置开始,一直到本文件结束

修饰函数

静态关键字static修饰函数的意义

可见性不一样,在函数前加上静态关键字static,该函数也只能是当前文件可用,其他文件不可用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值