详解C语言中的Static关键字

 更新时间:2022年01月18日 15:29:47   作者:build.code  
这篇文章主要为大家介绍了C语言中Static关键字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

一、static关键字的基本含义

首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型

1.局部变量:在任意一个函数内部定义的变量(不加static),初始值不确定,出函数自动销毁,存放于栈区。 使用static修饰这个变量时,编译器会把她初始化为零,存储于静态区,函数返回时值保持不变,出函数不销毁,下一次进入函数依然存在。根本原因——static修饰的局部变量存储在静态区。

2.全局变量 :普通全局变量定义在函数体外部,在静态区分配存储空间,编译器自动对其初始化。普通全局变量对整个工程可见,其他文件使用关键字extern外部声明后可以直接使用。 静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响。 在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。

3.函数:在函数的返回类型前加上static,就是静态函数。例如:static int main() 静态函数只能在声明它的文件可见,其他文件不能引用该函数。不同文件可以使用相同名字静态函数 非静态函数可以在另一个文件直接引用。

二、static关键字的用法

1.当使用普通局部变量时,如图,int a是一个局部变量,每次出函数后自动销毁,所以打印出"6666666666";

当使用静态局部变量时,如图。static修饰的局部变量除了局部范围后不会销毁,下一次进入函数依然存在。

2.如图 ,static声名的函数不能被另一个文件引用

三、static关键字的原理

因为static修饰的局部变量是存储在静态区的,static修饰全局变量时,实际改变的是变量的存储位置。 局部变量放在栈区的,被static修饰后放在了静态区。从而导致除了作用域依然存在,生命周期并没有结束

如图为存储区示意图

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 详解C++中赋值,关系,函数调用运算符重载的实现

    详解C++中赋值,关系,函数调用运算符重载的实现

    本文主要为大家讲解一下三个C++中的运算符重载,分别是赋值运算符重载、关系运算符重载和函数调用运算符重载,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-06-06
  • C和C++11之enum枚举的具体使用方法

    C和C++11之enum枚举的具体使用方法

    这篇文章主要介绍了C和C++11之enum枚举的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C语言文件操作零基础新手入门保姆级教程

    C语言文件操作零基础新手入门保姆级教程

    在实际应用中,我们往往需要对文件进行操作,下面这篇文章主要给大家分享了关于C语言文件操作的零基础新手入门保姆级教程,文中通过示例代码以及图片介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • C/C++ 原生API实现线程池的方法

    C/C++ 原生API实现线程池的方法

    线程池,简单来说就是有一堆已经创建好的线程,接下来通过本文给大家介绍C/C++ 原生API实现线程池的方法,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • C语言如何在字符数组中插入一个字符

    C语言如何在字符数组中插入一个字符

    这篇文章主要介绍了C语言如何在字符数组中插入一个字符,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • C++自定义函数示例详解

    C++自定义函数示例详解

    在数学中,函数是一种基本的数学对象,它建立了一个集合(称为定义域)中的每个元素与另一个集合(称为值域)中的唯一元素之间的对应关系,这篇文章主要介绍了C++自定义函数示例详解,需要的朋友可以参考下
    2025-03-03
  • C++中左值引用,右值引用,万能引用的关系及区别说明

    C++中左值引用,右值引用,万能引用的关系及区别说明

    这篇文章主要介绍了C++中左值引用,右值引用,万能引用的关系及区别说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 详细讲解C语言中的数据以及位运算

    详细讲解C语言中的数据以及位运算

    这篇文章主要为大家详细介绍了C语言中数据表示方法以及位运算的相关知识点,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • 使用C# 判断给定大数是否为质数的详解

    使用C# 判断给定大数是否为质数的详解

    本篇文章是对使用C#判断给定大数是否为质数的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言中的内存泄露 怎样避免与检测

    C语言中的内存泄露 怎样避免与检测

    堆经常会出现两种类型的问题:1.释放或改写仍在使用的内存(称为:“内存损坏”)。2.未释放不再使用的内存(称为:“内存泄露”)。这是最难被调试发现的问题之一
    2013-09-09

最新评论