[深度解剖C语言] –关键字 static

云惠网小编 2022年1月17日13:18:05
评论
1414字阅读4分42秒
摘要

static —最名不副实的关键字目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量static的作用:1.static修饰全局变量我们创建两个源文件,一个test.c,一个main.c现在我们在test.c文件下定义一个全局变量int g_val = 100;我们在main.c下进行调用打印g_val我们能访问到g_val吗?答案是可以的如果给g_val加上static修饰我们还能再main.c下访问到吗?

广告也精彩

 我们在test.c文件下写一个show()函数,请问在main.c文件能调用吗?

结论3:static修饰局部变量,更改该局部变量的生命周期。

我们在main.c下进行调用打印g_val我们能访问到g_val吗?

static:

1.static修饰全局变量

 结果:

 答案是可以的。

结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问,但是可以通过嵌套的方式调用,变相的封装的表现。

static的作用:

生命周期:将临时变量的生命周期变成全局变量的生命周期。

什么意思呢?就是在show函数的相同文件内创建一个新的函数,调用show函数,我们再在main.c文件下调用这个新的函数,已达到调用show()函数的目的。 

 答案当然是不一样的, 我们发现,结果变成了1-10。因此我们可以得到第三个结论。

这时候答案是不行的!

static int g_val = 100;

总结:

void fun()
{
static int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}

但是我们可以通过函数嵌套调用的方式调用show函数。

我们创建两个源文件,一个test.c,一个main.c

static ---最名不副实的关键字

3.static修饰局部变量

答案是不可以的!因此我们可以得到第二个结论

现在我们在test.c文件下定义一个全局变量

答案是可以的

分析:

1.static修饰全局变量

通过结果我们发现他打印了10个1,其中,i是局部变量,具有临时性,函数调用时开辟空间并初始化,函数结束释放空间。

3.static修饰局部变量

 

 

2.static修饰函数

 

你知道这段代码,它的运行结果是什么吗?

 

2.static修饰函数

那这时候给show()函数加上static,main.c下还能调用该函数吗?

结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问。但是可以通过嵌套的方式调用,变相的封装的表现。

void fun()
{
int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}


int g_val = 100;

作用域不变:作用域仍然是代码块内。

结论3:static修饰局部变量,更改该局部变量的生命周期。
生命周期:将临时变量的生命周期 -- 全局变量的生命周期。
作用域不变:作用域仍然是在本代码块内。

通过嵌套的方式调用,变相的封装的表现。

例:我们创建一个show_helper函数,来调用static修饰的show函数,我们再在main.c文件内调用show_helper函数。

结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。

目录

那么如果我们static修饰局部变量,即给int i  = 0;前static所修饰,结果还会一样吗?

结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。

 因此我们得到了static的第一个结论

因此static项目维护,可以提供安全保护。被static修饰,主要限制的是作用域。

如果给g_val加上static修饰我们还能再main.c下访问到吗?

本文转自 https://blog.csdn.net/qq_58325487/article/details/122527313

腾讯云618
云惠网小编
SpringCloud -- Config、Bus解析 java

SpringCloud — Config、Bus解析

1、Config1.1、概述简介1. 分布式面临的问题微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要...
Java数据结构-了解复杂度 java

Java数据结构-了解复杂度

2.实例分析与计算  四.写在最后  // 计算斐波那契递归fibonacci的时间复杂度 int fibonacci(int N) { return N < 2 ? N : fibonacci...
Java数据结构-认识顺序表 java

Java数据结构-认识顺序表

目录二.顺序表1.概念及结构2.顺序表的实现打印顺序表获取顺序表的有效长度在pos位置新增元素判断是否包含某个元素查找某个元素对应的位置获取/查找pos位置的元素给pos位置的元素...
数据结构java版之栈 java

数据结构java版之栈

# 一、栈的基本概念区分# 二、常见题型考查目录# 一、栈的基本概念区分# 二、常见题型考查一、栈的基本概念区分什么是栈什么是Java虚拟栈什么是栈帧
腾讯云618

发表评论