扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
static关键字在c/c++中的作用无非修饰三种类型。
成都创新互联作为成都网站建设公司,专注成都网站建设、网站设计,有关企业网站设计方案、改版、费用等问题,行业涉及成都酒楼设计等多个领域,已为上千家企业服务,得到了客户的尊重与认可。被static修饰过得局部变量,叫做静态局部变量,只会被赋一次初值,系统会把该变量在静态存储区开辟一块空间。不像一般的变量,开辟在堆栈区,系统用完就把空间释放了,但是static修饰过的局部变量,程序调用完不会立刻释放。会等到程序执行完再释放。但其作用域并不会改变,但是其生命周期会延长至程序结束。
首先看静态局部变量只会被赋值一次#includevoid test1()
{static int a=10;
int b=10;
printf("a=%d\n",a);
a++;
printf("b=%d\n",b);
b++;
}
int main()
{for(int i=0;i<4;i++)
{test1();
}
}
程序运行结果如下图:
由图一结果发现,静态局部变量只会被初始化一次。
由图二发现报错,说明静态局部变量作用域未被改变。
但是怎么查看其生命周期有没有改变呢;看下边代码。
#includeint *p=NULL;
int *q=NULL;
void test1()
{static int a=10;
int b=9;
p=&a;
q=&b;
}
int main()
{test1();
printf("a=%d\n",*p);
printf("b=%d\n",*q);
}
执行结果:
再看执行结果发现a的值没有改变,而b的值已经发生了改变。这是因为a变量被static修饰了,其地址空间并没有被释放,其它变量不能占用这一块空间,而反观b,其地址空间已经被释放了,所以其它变量可以占用这一块地址空间,因此b的值发生了改变。
大家可以参考一下这篇文章:
https://blog.csdn.net/z_x_m_m_q/article/details/82502162
static修饰的全局变量,其作用域被改变了,如果全局变量不被static修饰,那么这个全局变量可以在其它文件里面使用,但是加上static关键字,那么这个变量就不可以在其它文件中使用了。但是它的生命周期不会发生改变。
//文件1
#ifndef _EXP_H_
#define _EXP_H_
#includevoid print();
#endif
//文件2
#include"exp.h"
int overall=100; //对比量
static int ovErall=200; //被测量
void print()
{printf("66\n");
}
//文件3
#include#include"exp.h"
extern int overall;
extern int ovErall;
int main()
{printf("overall=%d\n",overall);
printf("ovErall=%d\n",ovErall);//注释掉此行程序不报错
}
//文件1
#ifndef _EXP_H_
#define _EXP_H_
#includevoid print1();
static void print2();
#endif
//文件2
#include"exp.h"
void print1()
{printf("66\n");
}
static void print2()
{printf("99");
}
文件3
#include#include"exp.h"
int main()
{print1();
//print2(); //注释掉此行函数正常运行,否则报错。
}
运行结果:
仅供学习参考,欢迎批评指正你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流