文章转载链接: https://blog.csdn.net/Payshent/article/details/70242965

在我们刚开始接触接触C语言的时候一定听说过static关键字,在刚开始学习C语言的时候相信很多人都会对static感到记忆深刻,刚开始学的时候我也一脸懵逼,现在觉得时候做一个归纳整理了。static的用法也就下面几点, 
1):static修饰局部变量 
2):static修饰全局变量 
3):static修饰函数

一、static修饰局部变量

普通的局部变量是在栈上进行分配的,局部变量所处的函数被多次调用时每次调用的位置都不一样的。局部变量也可以在堆上进行动态的分配,但须记得释放空间。 
静态局部变量和普通局部变量区别如下: 
访问权限:静态局部变量只能被其作用域内的变量和函数进行访问使用,它虽然存在与程序的整个生命周期,但由于是static的所以不能被其他函数和源文件访问。 
作用位置:静态局部变量被编译器存放在全局存储区(data),所以它虽然是局部的但是却存在与整个生命周期。 
值:静态的局部变量如果没有被初始化,会自动被编译器赋值为0,以后每次调用静态局部变量就都会用上次调用的值(每次函数调用静态局部变量都修改它然后离开,下次读的时候从全局存储区读的静态局部变量就是上次修改后的值)。 
注意: 
由于函数的每次调用,普通的局部变量都会重新分配,而静态局部变量会保持上次调用的值不变。正是由于static局部变量的这种特性,使得静态局部变量的函数变得不可重入,即每次调用可能会产生不同的结果,这在多线程编程时可能会成为一种隐患。

二、static修饰全局变量

说到静态局部变量我们先来看看一个进程在内存中的布局: 

.text段(文本段)保存的是进程所执行的二进制文件,.data段(数据段)保存进程已经初始化的全局变量,.bss段保存进程未初始化的全局变量。在进程的整个生命周期中,.data段和.bss段内的数据是根整个进程同生共死的,也就是在进程结束之后这些数据才会寿终正寝。当一个进程的全局变量被声明为static之后,静态全局变量和其他全局变量在存储位置并没有区别,都是在.data段(已初始化)和.bss段(未初始化区),但它只在定义它的源文件内是有效的,在同一 程序的其他源文件内是不可见的,这就是静态全局变量和普通全局变量的区别。

对static修饰的局部变量和全局变量还有疑问的话,可参照我的另一篇博客将静态局部变量,静态全局变量、局部变量、全局变量做的有详细的说明: 
局部变量、全局变量、静态局部变量、静态全局变量 
(点击可查看)。

三、static修饰函数

当一个程序中有很多源文件的时候,每个源文件可能会提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写的,这些函数可能不希望被外界所看见就用static来修饰这个函数,这就是静态函数。静态函数有些类似与C++里面private函数。 
static函数可以很好的解决不同原文件中函数同名的问题,因为一个源文件中的static函数对其他文件来说是不可见的。

tatic函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件. 
static函数在内存中只有一份,普通函数在每个调用中都有一份拷贝

static--修饰(局部变量、全局变量、函数)相关推荐

  1. 初识C语言之——static修饰变量及函数的认知。

    static--C语言中考题常见的关键字 在c语言中:static是用来修饰变量和函数. 我们可以先从字面意思来理解,即"静态的,静止的". 以至于它的修饰作用就有如下三个作用. ...

  2. 【编程】C++入门:static成员——用static修饰的成员函数,称之为静态成员函数。

    C++入门:static成员 用static修饰的成员函数,称之为静态成员函数. 静态的成员变量一定要在类外进行初始化. [静态的成员变量不能在声明.初始化列表中进行初始化.] class Date ...

  3. 局部变量 全局变量 函数的嵌套

    day10笔记: 局部变量: 1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量) 2. 局部变量只能在函数内部使用 3. 局部变量在函数调用时才能够被创建,在函数调用结束之后会自动销毁 ...

  4. 浅谈C语言static关键字 静态变量 函数

    目录 static对变量修饰 局部变量 全局变量 函数 static对变量修饰 局部变量 普通局部变量存储于进程栈空间,使用完毕会立即释放. 静态局部变量存储于进程的全局数据区,即使函数返回,它的值也 ...

  5. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  6. C++:Static修饰变量 vs Static修饰函数

    在C++语言中,Static关键字有两个作用:修饰变量和修饰函数. Static修饰全局变量叫做静态全局变量, Static修饰局部变量叫做静态局部变量, Static修饰函数叫做静态函数: 静态全局 ...

  7. C/C++中static的用法全局变量与局部变量

    转载自C/C++中static的用法全局变量与局部变量 1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1static的引入 我们知道在 ...

  8. C语言static关键字修饰变量及函数时的用法和原理

    目录 一.static关键字修饰局部变量 二.static关键字修饰全局变量 三.static关键字修饰函数 一.static关键字修饰局部变量 在内存中,往往将其分为三个区块,栈区,堆区,静态区.C ...

  9. C语言--static修饰变量

    Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用static修饰变量,不论这个变量是全局的还是 ...

  10. c++ static修饰符浅析

    c++ static修饰符浅析 下面一段是引用自effective c++ 中的一句话: 所谓的static对象,其寿命是从构造出来到程序结束为止(以下文章不再赘诉).因此stack和heap-bas ...

最新文章

  1. linux系统管理学习笔记之三----软件的安装
  2. Qt修炼手册12_线程同步与线程等待条件
  3. Pinterest:Android系统上的视频管理
  4. Android插件基础之类加载器学习
  5. 定制textField
  6. FPGA学习笔记---Verilog HDL 可综合语句和不可综合语句汇总
  7. ylbtech-Bill(发票管理)-数据库设计
  8. LeetCode 30. Substring with Concatenation of All Words
  9. Mysql查询结果导出为Excel的几种方法
  10. 74cms php在那个文件夹里面,74cms骑士人才网站系统 v5.0/v5.1后台目录地址修改教程...
  11. 【建议收藏】1000套HTML静态网页设计期末大作业 (HTML+CSS+JS)
  12. 绝对干货-国内值得关注的官方API集合,很全很强大(必须收藏)
  13. 6120c手机使用教程大全!
  14. 硅烷PEG硅烷,Silane-PEG-Silane
  15. 2013-07-22 码市-武汉 返程票
  16. 弱口令实验室招新赛Writeup
  17. macOS Mojave 10.14.2 原版镜像
  18. NI控件之 CWGraph使用(COM)
  19. echarts_series总结
  20. ajax 表单提交传文件,Ajax提交Form表单及文件上传

热门文章

  1. 【52】写了placement new也要写placement delete
  2. linux --redis的部署 即主从
  3. Web 第二阶段Java Script (续)
  4. XHProf报告字段含义
  5. 列表生成式、生成器、迭代器
  6. 如何在Android平台下进行Socket通信
  7. sqlserver 动态表名 动态字段名 执行 动态sql
  8. python8.3多进程
  9. 射频与微波测量之S参数
  10. Oracle12c安装出错