大家好,本篇文章主要讲的是C语言中static的使用介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
1.static 可以修饰局部变量
首先让我看看这段代码
#include<stdio.h>
void test()
{
int a = 1;
a = a + 1;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
你认为输出的结果是什么呢?
那为什么结果是2222222222呢
因为局部变量 a 进入这个范围创建 出了这个范围销毁 所以结果都是2
当我们加上static 的结果又会是什么
那为什么加上 static 结果就不一样了
我们研究一下static的使用原理
我们的内存分为三大类
我们的局部变量放在栈区
而static把a放在了静态区 而在静态区的变量 出了他的范围是不销毁的
我们对比一下 可能更加直观
所以 static 修饰局部变量的时候,其实改变的是局部变量得存储位置
静态得局部变量是放在静态区,放在静态区的变量出了作用域是不会销毁的,相当于生命周期延长了。
补充 变量的作用域是不变的,只是生命周期延长了
2. static 可以修饰全局变量
我们再创建一个源文件
全局变量的作用域是整个工程
如果我们想引用另一个源文件的函数 这里我们不得不说 extern 这个关键字
如图
static 可以修饰全局变量 如果我们再全局变量前 加上static会是什么结果呢
此时就会报错
一个全局变量具有外部链接属性的 (就是可以被其他源文件引用)但是被static 修饰后外部链接属性就变成了内部链接属性 只能在自己所在的源文件内部使用不能在其他文件内部使用
所以再次调试的时候就会报错
那 static 修饰的全局变量的本质是 外部链接属性发生改变 而不是他的作用域变小
static 修饰全局变量的意义是 如果你定义了一个全局变量 别人用 extern 就可以随便使用
如果你不想让别人看 就可以用static .
3.static 可以修饰函数
我们用另一个源文件创建一个函数 如图
用 关键字extern 声明后 调试结果
这里我们在函数前加上static 又会是什么结果呢
其实一个函数本身具有外部链接属性 被static修饰后 外部链接属性变成了内部链接属性 只能在源2.c 内部使用 其他源文件无法使用 使用上感觉作用域变小
我们可以发现 static 修饰全局变量和修饰函数用法一样
总结
当我们使用一个局部变量 出了他的范围 不希望他被销毁下次进来之后还在 那我们就可以拿static 修饰
当我们希望一个全部变量 在他自己源文件使用 任意其他地方不想让别人看到 也可以用static修饰
当我们写的函数只是自己用一下 不希望别人引用 则也可以用static修
到此这篇关于C语言中static的使用介绍的文章就介绍到这了,更多相关C语言static内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言中static的使用介绍
基础教程推荐
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17