栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

static在c语言(c++中static的作用和用法)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

static在c语言(c++中static的作用和用法)

1,static修饰局部变量

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
    特点如下:
  1)存储区:由于栈变为静态存储区rw data,生存期为整个源程序,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它;当static修饰局部变量时,可以达到改变局部变量生命周期的目的.
          
  2)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

参照代码:

void test()
{
	static int a=1;   //statis改变局部变量的生命周期;变量没有被销毁时,不需要被再次定义;
	a++;
	printf("%dn",a);
}//函数调用完之后会被销毁,所以每次打印的都是2;
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

运行结果为:
2 2 2 2 2 2 2 2 2 2 (10个2)
原因在于static int a=1创建了一个静态的局部变量,使得局部变量a的生命周期变长,上一次的a值仍被保留在作用域内未被销毁,每次循环调用函数test()时,上一次的a值仍被保留在作用域内,不再执行static int a=1代码语句,即不需要对变量a重新初始化。
 

2,static修饰全局变量

当static修饰全局部变量时,可以达到改变全局变量作用域目的,使得全局变量只能在其被定义的源文件之下被找到。

在全局变量前加static,全局变量就被定义成为一个全局静态变量。
    特点如下:
   1)存储区:静态存储区没变(静态存储区在整个程序运行期间都存在);
   2)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

例如:(参照代码) 

在test.c文件中有如下代码段:

extern int g_val;   //声明外部变量
int main()
{
	printf("%dn",g_val);
	return 0;
}

在add.c文件中定义一个全局变量:

//定义一个全局变量
static int g_val = 2020;

调试运行

1>------ 已启动生成: 项目: test_lxl_3_15, 配置: Debug Win32 ------
1>  test.c
1>test.obj : error LNK2001: 无法解析的外部符号 _g_val
1>H:2020C C++学习ClassCodetest_lxl_3_15Debugtest_lxl_3_15.exe : fatal error LNK1120: 1 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

3,static修饰函数,和2类似,也是改变了函数的作用域,本质上改变了链接属性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号