189 8069 5689

C/C++关于static-创新互联

C/C++ 关于static

static关键字在c/c++中的作用无非修饰三种类型。

成都创新互联作为成都网站建设公司,专注成都网站建设、网站设计,有关企业网站设计方案、改版、费用等问题,行业涉及成都酒楼设计等多个领域,已为上千家企业服务,得到了客户的尊重与认可。
  • 修饰局部变量
  • 修饰全局变量
  • 修饰函数
1、static修饰局部变量

被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的值发生了改变。


还有关于static修饰类成员变量、结构体成员变量,其实和局部变量原理一样。

大家可以参考一下这篇文章:

https://blog.csdn.net/z_x_m_m_q/article/details/82502162



2、static修饰全局变量

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);//注释掉此行程序不报错
}

在这里插入图片描述
在这里插入图片描述



3、static修饰函数 static修饰函数与修饰全局变量效果一样
//文件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元起,快前往官网查看详情吧


分享标题:C/C++关于static-创新互联
新闻来源:http://cdxtjz.com/article/eeeoj.html

其他资讯