ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言入门之关键字static的使用

2022-01-30 22:58:48  阅读:128  来源: 互联网

标签:函数 局部变量 C语言 源文件 关键字 static 修饰 全局变量


前言

在C语言中: static是用来修饰变量和函数的


一、修饰局部变量

修饰局部变量-称为静态局部变量

        具有关键字static修饰的局部变量出现这个变化的主要原因是因为,在内存中(大致来说):局部变量存储于栈区的区域之中,而静态变量是与全局变量相同,都存储于静态区,而存储在静态区的变量出了它的作用域变量也不销毁,所以生命周期较长。因此,static修饰局部变量的时候,改变了局部变量的存储类型。(但是作用域是不被改变的)

       让我们先来看看有与没有关键字static的代码的区别:

       用关键字static修饰的局部变量的生命周期发生了变化,它在第一次进入函数创建之后,就不会因为出函数而销毁,并且会保留上一次计算而保留的值,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。但是由关键字static修饰的局部变量的作用域是不会发生变化的,还是与普通的局部变量相同,无法在函数外直接使用。

       利用反汇编我们可以关注到,被关键字static修饰的局部变量是不具备汇编代码的,同时利用逐语句逐步观察我们也可以发现在除了第一次进入函数时,会执行创建局部变量n并赋值0。但是,随后就不会再次执行一条语句。

二、修饰全局变量

修饰全局变量-称为静态全局变量

       一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

       让我们先来看看有与没有关键字static的代码的区别:

       在此我们所需要知道,代码的(简易)执行需要经过 (.c) —— 编译(.obj) —— 链接 —— 可执行程序(exe),在编译(.obj)中,一个程序中的文件是不相联系的,只有在链接之下才会相互之间具有联系。而全局变量与函数都是具有外部连接属性的,是可以文件之间相互联系利用的。

        而static修饰全局变量的时候,改变了全局变量的链接属性本来一个全局变量是具有外部链接属性的,但是被static修饰之后就变成了内部链接属性。这时static修饰的全局变量只能在本源文件(.c)中使用,其他文件无法再使用到。

三、修饰函数

修饰函数-称为静态函数 

       一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

       让我们先来看看有与没有关键字static的代码的区别:

       其实static修饰函数和修饰全局变量是类似的,一个函数本来也是与全局函数具有外部链接属性的。当被static修饰的时候,外部链接属性就变成了内部链接属性,这个函数就只能本源文件内部使用,其他文件不能再使用了。


总结

static修饰局部变量:
       改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
static修饰全局变量:
       使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
static修饰函数:
       使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

标签:函数,局部变量,C语言,源文件,关键字,static,修饰,全局变量
来源: https://blog.csdn.net/weixin_64609308/article/details/122751029

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有