iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文搞懂C语言static关键字的三个作用
  • 434
分享到

一文搞懂C语言static关键字的三个作用

2024-04-02 19:04:59 434人浏览 独家记忆
摘要

目录static修饰局部变量static 修饰全局变量static 修饰函数总结static修饰局部变量 图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空

static修饰局部变量

图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空间,栈区的使用特点是进入变量的生命周期时自动为其开辟空间,离开变量的生命周期时自动销毁对应空间,所以这里每次调用 test 函数时 a 都会被重新定义并初始化为0,所以屏幕上打印的是10个1;

图二:我们把 a 用 static 修饰后发现屏幕打印的是1到10,就好像每次调用完 test 函数后 a 并没有被销毁,而是继续使用,下次调用 test 函数时 a 直接在之前的基础上进行 ++ 操作。
所以 static 修饰局部变量的作用是:改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是在栈区上开辟空间,而是直接在静态区上开辟空间,从而使得局部变量拥有和全局变量一样的生命周期,即随着整个程序生成和销毁。

更深入的理解 static 修饰局部变量的作用:图三,我们的程序从源文件(.c文件)变成可执行程序(.exe文件)需要经过编译链接运行三个环节,而编译环节又分为预处理、编译、汇编三个阶段,在汇编阶段,编译器会把我们的C语言代码转换成汇编代码,而每一条C语言语句都对应着多句汇编代码,然而在图三中,我们可以观察到,只有 static int a = 0; 这条语句没有对应的汇编代码,也就是说,C语言在编译的时候会直接跳过这条语句。
本质上是:在编译环节的编译阶段编译器就会为被 static 修饰的局部变量分配空间,所以C程序在运行的过程中会直接跳过 static 修饰的语句,也就是说,在第二次及以上甚至第一次调用 test 函数时 static int a = 0; 这条语句都不会被执行。

static 修饰全局变量

图一图二对比分析:我在Add.c中定义了一个全局变量g_val,因为全局变量具有外部链接属性,所以我只需要在test.c中对g_val进行声明之后就可以正常使用了,但是当我用 static 来修饰g_val时,我们发现,编译器说g_val是无法解析的外部符号;
所以 static 修饰全局变量的作用是:改变了全局变量的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是全局变量的作用域变小了。

static 修饰函数

图一图二对比分析:这里和 static 修饰全局变量非常类似,我在Add.c中定义了一个Add函数,因为函数也具有外部链接属性,所以我只需要在test.c中对Add函数进行声明之后就可以正常使用了,但是当我用 static 来修饰Add函数时,我们发现,编译器说Add是无法解析的外部符号;
所以 static 修饰函数的作用是:改变了函数的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是函数的作用域变小了。

总结

  • static 修饰局部变量的作用:改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是在栈区上开辟空间,而是直接在静态区上开辟空间,从而使得局部变量拥有和全局变量一样的生命周期,即随着整个程序生成和销毁。
  • static 修饰全局变量的作用:改变了全局变量的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问)。
  • static 修饰函数的作用是:改变了函数的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问)。

到此这篇关于一文搞懂C语言static关键字的三个作用的文章就介绍到这了,更多相关C语言static关键字内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文搞懂C语言static关键字的三个作用

本文链接: https://www.lsjlt.com/news/145663.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文搞懂C语言static关键字的三个作用
    目录static修饰局部变量static 修饰全局变量static 修饰函数总结static修饰局部变量 图一:test 函数里面定义的 a 是局部变量,局部变量在栈区上开辟空...
    99+
    2024-04-02
  • 一文搞懂Go语言中defer关键字的使用
    目录前言defer是什么多个defer的执行顺序延迟函数的参数在defer声明时就决定了defer和return的顺序defer和panicdefer下的函数参数包含子函数总结前言 ...
    99+
    2024-04-02
  • 一文带你了解C语言中static关键字的3个作用
    目录1.修饰局部变量2.修饰全局变量3.修饰函数总结static这个关键字是“静态”的意思,在C语言里有3个作用。分别是: 1.修饰局部变量,该局部变量称为静...
    99+
    2023-05-15
    C语言 static关键字作用 C语言 static关键字 C语言 static
  • 一文搞懂java中类及static关键字执行顺序
    目录类的生命周期static关键字static关键字执行顺序继承中的static执行顺序总结类的生命周期 加载:classpath、jar包、网络、某个磁盘位置下的类的class二...
    99+
    2024-04-02
  • c语言关键字static的作用是什么
    在C语言中,关键字static有以下几种作用:1. 静态变量:static关键字可以用于声明静态变量,静态变量存储在静态存储区,在程...
    99+
    2023-09-14
    c语言 static
  • 一文搞懂C语言中的文件操作
    目录一、文件操作1、 为什要使用文件操作2、什么是文件3、文件操作的使用一、文件操作 1、 为什要使用文件操作 在c语言中我们完成一个程序后,他并不会对我们的数据进行保存,就像我上一...
    99+
    2022-11-21
    C语言文件操作 C语言 文件
  • C语言中static关键字的作用是什么
    本篇内容介绍了“C语言中static关键字的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!static这个关键字是“静态”的意思,...
    99+
    2023-07-05
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言中的Static关键字怎么用
    这篇文章主要介绍C语言中的Static关键字怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、static关键字的基本含义首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存...
    99+
    2023-06-26
  • c语言中关键字Static怎么用
    这篇文章将为大家详细讲解有关c语言中关键字Static怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、可执行程序内存分配1. 可执行程序程序分段一个程序的3个基本...
    99+
    2024-04-02
  • c++中static关键字的作用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • 详解C语言中的Static关键字
    一、static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加sta...
    99+
    2024-04-02
  • C语言的static关键字应用实例分析
    这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析...
    99+
    2023-06-30
  • 深度理解C语言中的关键字static
    目录一、函数和变量的多文件问题1.1.为什么全局变量和函数需要跨文件访问二、static修饰变量和函数2.1.static修饰全局变量2.2.static修饰局部变量2.3.为什么局...
    99+
    2024-04-02
  • c语言中typedef关键字的作用
    c语言中typedef关键字的作用是定义类型别名。它创建已存在数据类型的新名称,增强代码可读性和可维护性,包括:创建类型别名数据类型重用增强代码可读性提高代码可维护性 C语言中type...
    99+
    2024-05-10
    c语言 代码可读性 typedef
  • c语言中const关键字的作用
    const关键字在c语言中用于修饰变量或函数,使其值或行为在程序执行期间保持不变。它可以修饰变量(使其成为常量),防止意外修改数据,提高程序安全性。此外,const还可以修饰函数,确保其...
    99+
    2024-05-10
    c语言 敏感数据 代码可读性
  • c语言中extern关键字的作用
    extern 关键字用于声明其他源文件中定义的变量、函数或符号,告知编译器它们不是在当前源文件中定义的。它用于:向当前源文件中的其他函数提供对外部符号的访问权限。链接不同源文件时,确保符...
    99+
    2024-05-10
    c语言
  • 一文搞懂Go语言中条件语句的使用
    目录if语句if...else 语句if 语句嵌套switch 语句Type Switchfallthroughselect 语句条件语句需要开发者通过指定一个或多个条件,...
    99+
    2024-04-02
  • c语言register关键字的作用是什么
    C语言中的register关键字用于向编译器建议将变量存储在寄存器中,以便更快地访问。它是一种优化技术,用于提高程序的执行速度。使用...
    99+
    2023-09-16
    c语言
  • c语言volitate关键字的作用是什么
    在C语言中,volatile关键字用于告诉编译器,所修饰的变量可能会在程序的执行过程中被意外修改,因此编译器在优化代码时应该避免对这...
    99+
    2024-03-01
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作