文章目录

  • 目录

    前言

    一、static是什么

    二、static的用法

    1.修饰局部变量

    2.修饰全局变量

    3.修饰函数

    总结


前言

static在不同的语言中又有不同的使用方法,本文介绍的是static在C语言当中的用法。


一、static是什么

static在C语言中是关键字,中文直译过来是“静态的”,static关键字在C语言中主要是用来修饰变量和函数。

二、static的用法

1.修饰局部变量

——称为静态局部变量

static修饰局部变量时,会改变局部变量的存储位置,从而使得局部变量的生命周期变长。

我们用一段代码来进行详解:

void test()
{int x = 0;x++;printf("%d ", x);
}int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}

这段代码中每次调用test()函数时创建局部变量x赋值为0,每次局部变量x出了test()函数后都会自行销毁。

所以可以很容易得到输出结果为:1 1 1 1 1 1 1 1 1 1


接着我们用上static关键字来修饰test()函数中的局部变量x:

void test()
{static int x = 0;x++;printf("%d ", x);
}int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}

输出结果变成了:1 2 3 4 5 6 7 8 9 10

原因是static修饰了局部变量x,令局部变量x变成静态的,使得每次test()函数结束时局部变量x都不销毁,再次进入test()函数时则保留原有数值运行,因此x++数值越来越大。

其本质是:

普通的局部变量创建后是放在栈区中,这种局部变量进入作用域时创建,出了作用域就销毁;

但static修饰后的局部变量则放在静态区中,它改变了局部变量的存储位置,从而使得变量的生命周期延长,延长至程序结束才销毁。

注意:static修饰局部变量只改变生命周期,不改变作用域!


2.修饰全局变量

——称为静态全局变量

static修饰全局变量时,会改变全局变量的链接属性,从而使得全局变量的作用域变小。

这段话什么意思呢,先来简单说说全局变量

全局变量的作用域十分的广,只要在一个源文件中定义后,这个程序中的所有源文件、对象以及函数都可以调用,生命周期更是贯穿整个程序。文件中的全局变量想要被另一个文件使用时就需要进行外部声明(以下用extern关键字进行声明)。

接着我们用代码进行解析:

全局变量x在自己的文件内可以直接使用。

但当全局变量在另一个文件内未进行外部声明就想直接用时会出现未定义的错误:

此时只要使用extern关键字声明一下即可:

接着我们进入正题,当我们用static修饰全局变量x后:

会发现生成错误,无法解析外部符号x,全局变量x不能被test.c文件调用了。所以我们可以很容易看出static修饰后让全局变量x的作用域变小了,令全局变量x无法被其他文件调用。

其本质是:

    全局变量本身是具有外部链接属性的,在A文件中定义的全局变量,在B文件中可以通过【链接】来使用;

但如果全局变量被static修饰,那这个外部链接属性就会被修改成内部链接属性,此时这个全局变量就只能在自己的源文件中使用;

3.修饰函数

——称为静态函数

static对函数的修饰与修饰全局变量十分相似,修饰函数时会改变函数的链接属性,从而使得函数的作用域变小。

我们直接上代码:

函数在另一个文件中使用时同样需要声明。

但当函数被static修饰后:

会发现Add函数无法被解析了,static修饰后Add函数的作用域变小了。

本质和全局变量很像:

函数本身也是有外部链接属性的;

  被static修饰后,函数的外部链接属性被修改成内部链接属性,使得这个函数只能在自己的源文件内被使用,因此函数的作用域就变小了。


总结

以上就是要说的内容,本文仅仅简单介绍了static在C语言的使用,static在其他语言中还有更多的使用方法。本文是小编的第一篇知识总结,如有不足的地方欢迎大佬们在评论区指出。也还望各位觉得有用的话一键三连+关注,谢谢!

【C语言】 Static关键字的用法和详解(太细了!!!)相关推荐

  1. c++语言关键字大全,C++语言const 关键字使用方法图文详解

    之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自 ...

  2. C++基础之static关键字(1)--静态局部变量详解

    本篇文章主要讲解C++基础中static关键字的静态局部变量并进行实例演示. 一.静态局部变量定义 在讲静态局部变量时,我们首先看一下全局变量和局部变量. 1.全局变量 全局变量定义在所有函数之外,并 ...

  3. ConcurrentHashMap原理详解(太细了)

    一.什么是ConcurrentHashMap ConcurrentHashMap和HashMap一样,是一个存放键值对的容器.使用hash算法来获取值的地址,因此时间复杂度是O(1).查询非常快. 同 ...

  4. java this关键字的使用_Java this 关键字的使用方法详解

    Java this 关键字的使用方法详解 构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个 ...

  5. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  6. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  7. 1000以内完数c语言程序_C语言经典面试题目及答案详解(二)

    接着上次来说,C语言经典面试题目及答案详解(一)当中大部分是一些概念和理解的东西 ,今天说一说实践操作,有关c的经典程序. 1.输出9*9口诀.共9行9列,i控制行,j控制列. #include &q ...

  8. c语言结构体成员变量私有化,C语言中结构体变量私有化详解

    C语言中结构体变量私有化详解 背景介绍 操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚 ...

  9. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

最新文章

  1. 19-flutter的ListView 和 GridView的使用
  2. 2018 年,关于深度学习的 10 个预测
  3. UCenter实现同步登陆原理
  4. 【IM】关于在线学习(被动攻击学习和适应正则化学习)的理解
  5. php 去除二维数组中的包含某一个值的数组
  6. Zookeeper_watch机制核心讲解
  7. 并发请求数_nginx如何限制并发连接和请求数?
  8. PHP写猜数字,PHP算法之猜数字
  9. 计算机硬件的维护知识,电脑放了一年开不了机 电脑硬件维护常识要点有哪些...
  10. LeetCode——866.回文素数
  11. redis.conf 配置详解
  12. TeamCity+Rancher+Docker实现.Net Core项目DevOps(目前成本最小的DevOps实践)
  13. 推荐15款免费的网页抓取软件
  14. 服务器显示演示版,金蝶软件打开后提示是演示版怎么办?
  15. 为什么有人愿意将软件开源和共享?
  16. 没有计算的推理和基于推理的计算 逻辑与算法之五
  17. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
  18. 可达性分析算法与理解误区
  19. 2020年12月特许金融分析师CFA考试难度分析!
  20. 计算机自考本科英语二可以用什么代替,自考英语二用什么可以代替免考

热门文章

  1. 数组和链表的增删改查速度比较
  2. 皮卡丘的python程序_皮卡丘第一种
  3. 小程序 身份认证服务器,如何实现微信小程序与.net core应用服务端的无状态身份验证...
  4. 格灵深瞳:人脸识别最新进展以及工业级大规模人脸识别实践探讨 | 公开课笔记...
  5. 《那些年啊,那些事——一个程序员的奋斗史》——36
  6. 虚拟机过se vmp检测
  7. 阿里云支持备案云产品列表(不只是云服务器)
  8. 十月3倍销量于特斯拉的比亚迪,新增量在何处?
  9. python初级教练员考试题目_JS | 教练,我想做习题8
  10. 3D角色模型欣赏:伊什塔尔-金星女神