当前位置: 首页 > news >正文

C初阶(六)--- static 来喽

前言:C语言中有许多关键字(关键字是预先保留的标识符,具有特殊意义,不能用作变量
           名、函数名等普通标识符。)

           比如:前面在变量与常量那一节提到的extern 就是一个关键字,应该还记得extern是             干什么的吧(坏笑)。

           今天,杰哥给大家带来的是关键字static作用 的小小的知识汇总。

 static(静态存储类型)的作用

一、修饰局部变量

在函数内部,使局部变量具有静态存储期。变量只会初始化一次,在函数多次调用间保留其值。

首先,先小小地看一下这张图:

诸侯崛起,逐鹿中原,多年纷争,三分天下。

———— “局部变量”在栈区 (变量的生命周期较短)

————“全局变量”在静态区 (变量的生命周期较长)

 

那么,以上这张图能和static 有什么关系呢?

———— static 能使得 局部变量从栈区移到静态区,从而改变变量的生命周期。示例如下:

(1、以下调用了函数,函数呢 ? 不知道的话,可以先把函数理解成一个加工厂,而main 理解为公司总部,公司中的半成品要移到加工厂加工;     2、while是一种循环语句,用于在一定条件下的再次运行/重复操作)

——左图:每次调用并进入函数test ,a 每次都会重置(初始化都0)

——右图:a的值得以保留,直到程序结束

 

 总的来说,变量的作用域(还是在test函数中)不变,但是生命周期变长了 。

二、修饰全局变量

限制全局变量的作用域,使其只能在定义它的源文件内使用,其他源文件无法直接访问。

示例如下:

前面,我们已经知道extern 用来声明外部变量,使得其它源文件的变量(外部变量)可以在本源文件中使用 。

这是因为: 

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

但是:

  • 如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性,这个全局变量只能在自己所在的源文件内部使用。

三、修饰函数

 类似修饰全局变量的作用,使函数只能在其定义的源文件内被调用,不能被其他源文件调用。

  • 函数本身是具有外部链接属性的。
  • 被static修饰后,外部链接属性就变成了内部链接属性,使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用 。

四、实操 (输出的答案下节公布)

 

http://www.lryc.cn/news/452265.html

相关文章:

  • Git版本控制工具--关于命令
  • 【iOS】计算器的仿写
  • 报错 libgomp.so.1, needed by vendor/llama.cpp/ggml/src/libggml.so, not found
  • wsl(3) -- USB使用
  • 从原理到代码:如何通过 FGSM 生成对抗样本并进行攻击
  • 从零开始学习OMNeT++系列第一弹——OMNeT++的介绍与安装
  • Cluster Explanation via Polyhedral Descriptions
  • 爬虫设计思考之一
  • 解决centos 删除文件后但空间没有释放
  • 微软SCCM:企业级系统管理的核心工具
  • RTSP作为客户端 推流 拉流的过程分析
  • 【MySQL 07】内置函数
  • 《深度学习》OpenCV 背景建模 原理及案例解析
  • 机器学习(1):机器学习的概念
  • 0. Pixel3 在Ubuntu22下Android12源码拉取 + 编译
  • ip经过多个服务器转发会网速变慢吗
  • mongodb通过mongoimport导入JSON文件数据
  • 【Qt】控件概述 (1)
  • ping基本使用详解
  • Win10之解决:设置静态IP后,为什么自动获取动态IP问题(七十八)
  • 【AI论文精读1】针对知识密集型NLP任务的检索增强生成(RAG原始论文)
  • 踩坑spring cloud gateway /actuator/gateway/refresh不生效
  • 【STM32开发环境搭建】-3-STM32CubeMX Project Manager配置-自动生成一个Keil(MDK-ARM) 5的工程
  • 计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Java的学习(语法相关)
  • 简单的springboot 编写Socket服务接口
  • 【Android 源码分析】Activity短暂的一生 -- 目录篇 (持续更新)
  • VS Code使用Git Bash终端
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)
  • 【C++】多态(下)