C语言之static关键字详解

这篇具有很好参考价值的文章主要介绍了C语言之static关键字详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 前言:

一、几个概念

1.变量

2.局部变量和全局变量

3.变量的作用域

4.变量的生命周期

二、static关键字的作用

三、static关键字修饰局部变量

四、static关键字修饰全局变量

 五、static关键字修饰函数

 写在最后:


 前言:

           static,英文意思静态的,作为C语言常用关键字中一个很重要的关键字,其用法多样且比较难以理解。

一、几个概念

         首先,介绍几个与static关键字用法有关的重要概念,便于后面知识的更好理解。

1.变量

   变量:C语言中可变化的值用变量来表示

变量的命名规则:

(1)只能由字母(包括大写和小写)、数字下划线(_)组成

(2)不能数字开头

(3)长度不超过63个字符

(4)变量名区分大小写

(5)变量名不能使用关键字

2.局部变量和全局变量

   这里展示一段代码示例。

#include<stdio.h>

int a = 2020;//全局变量
int main()
{
	int b = 2021;//局部变量
	int a = 2023;//局部变量
	printf("a = %d", a);
	return 0;
}

总结:

局部变量:定义在函数体内部的变量,只能在函数体内部使用。

全局变量:定义在函数体外部的变量,在整个程序中都可以使用。 

       我们再康康上面这段代码会发现,变量a既为全局变量又为局部变量,即出现了局部变量和全局变量同名的情况,输出变量a,运行结果如下:

c语言static,c语言,开发语言,c#

 总结:允许局部变量和全局变量同名,且同名的时候,局部变量优先使用。

3.变量的作用域

   作用域:一段程序代码中所用到的名字并不总是有效或者可用,而限定这个名字可用性的代码范围就是这个名字的作用域。

(1)局部变量的作用域是变量所在的局部范围。

(2)全局变量的作用域是整个工程。

4.变量的生命周期

变量的生命周期:变量的创建到变量的销毁之间的一个时间段。

(1)局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。

(2)全局变量的生命周期:整个程序的生命周期。

二、static关键字的作用

       在C语言中,static关键字是用来修饰变量和函数的。

       1.修饰局部变量(称为静态局部变量)

       2.修饰全局变量(称为静态全局变量)

       3.修饰函数(称为静态函数)

三、static关键字修饰局部变量

       我们仍然先展示一段示例代码:

#include<stdio.h>

void text()
{
	int a = 0;
	a++;
	printf("%d ", a);
}
int main()
{
	int i= 0;
	for (i= 0; i < 10; i++)
	{
		text();
	}
	return 0;
}

     main函数中使用for循环,将text函数循环十次。代码中变量a作为局部变量,text函数中a初始值为0,a++后a的值为1,打印输出1,a每次循环进入text函数创建,出text函数销毁。故程序最后运行结果为10个1。

c语言static,c语言,开发语言,c#

我们用static修饰text函数中的局部变量a,代码如下:

#include<stdio.h>

void text()
{
	static int a = 0;
	a++;
	printf("%d ", a);
}
int main()
{
	int i= 0;
	for (i= 0; i < 10; i++)
	{
		text();
	}
	return 0;
}

运行结果如下:

c语言static,c语言,开发语言,c# 

       我们可以发现,当static修饰局部变量a时,程序运行结果为1到10。由运行结果分析,当static修饰局部变量a后,变量a在text函数中进入后创建,出函数并未后销毁,而是保留了上一次循环a出text函数后的值继续作用,即局部变量a被static关键字修饰后,作用域不变,生命周期变长了。

      本质上来讲的话,需要简单了解以下知识。

      内存可分为栈区、堆区、静态区(也可称为全局区)等。栈区存放函数的参数值、局部变量的值等,这些数据进入作用域创建,出作用域被销毁。堆区用于动态内存分配等。静态区存储全局变量和静态变量,这些变量创建好后,直到程序结束后才释放。

c语言static,c语言,开发语言,c#

总结:

(1)static关键字修饰局部变量不改变作用域,但是生命周期变长

(2)本质上,static关键字修饰局部变量,改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。普通的局部变量放在栈区,这种局部变量进入作用域创建,出作用域释放。局部变量被static修饰后成为静态局部变量,这种变量放在静态区,创建好后,直到程序结束后才释放。

四、static关键字修饰全局变量

       首先展示代码,我们在同一个工程中创建两个源文件,在左边源文件中定义全局变量a的值,在右边源文件中使用关键字extern,声明外部变量a。

c语言static,c语言,开发语言,c#

        在右边源文件中打印输出a的值为2022,运行结果如下:

c语言static,c语言,开发语言,c#

若用static关键字修饰左边源文件里的全局变量a,再次运行右边源文件,运行结果出错:

c语言static,c语言,开发语言,c#

 总结:

(1)全局变量本身具有外部链接属性,可使用extern关键字声明外部文件变量,实现跨文件变量使用。但是如果全局变量被static关键字修饰后,这个外部链接属性就变成了内部链接属性,全局变量作用域变小,全局变量只能在自己所在的源文件内部使用。

(2)static关键字修饰全局变量,不改变生命周期作用域变小

 五、static关键字修饰函数

       static关键字修饰函数与修饰全局变量相似,我们在同一个工程中创建两个源文件,在左边源文件中定义函数max,在右边源文件中使用关键字extern,声明外部函数max。

c语言static,c语言,开发语言,c#

       在右边源文件中打印输出max的值为2,运行结果如下:

c语言static,c语言,开发语言,c#

       若用static关键字修饰左边源文件里的函数max,再次运行右边源文件,运行结果出错:

c语言static,c语言,开发语言,c#

c语言static,c语言,开发语言,c#

 总结:函数本身具有外部链接属性,可使用extern关键字声明外部文件函数,实现跨文件函数使用。但是如果函数被static关键字修饰后,函数只能在自己所在的源文件内部使用不能在其他源文件内使用。

 写在最后:

       我们可以使用static关键字修饰变量或者函数防止被误引用,如果不是对外提供的全局变量和函数,最好都用static关键字修饰,保证数据安全。

       我们下次见咯~~~文章来源地址https://www.toymoban.com/news/detail-774157.html

到了这里,关于C语言之static关键字详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C】static关键字详解

    static的汉语意思是静态的,在C语言中static可以用来修饰 局部变量、全局变量和函数。 在这里给大家补充一个知识,我们的数据在内存中存储时,大概分为3个区域。 1. 栈区 :我们创建的局部变量、形参等一般就存放在这个区域,离开作用域是会自动销毁,将空间还给

    2024年02月10日
    浏览(40)
  • C++—static关键字详解

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 静态全局变量有以下特点: 1、该变量在全局数据区分配内存; 2、未经初始化的静态全局变量会被程序自动初始化为

    2024年02月15日
    浏览(38)
  • 详解const、static关键字

    目录   一、static 二、const 在c语言中: static是用来修饰变量和函数的         1.修饰局部变量——称为静态局部变量         2.修饰全局变量——称为静态全局变量         3.修饰函数——称为静态函数 有关内存相关知识补充: 程序的所有数据,也就是所有的

    2024年02月06日
    浏览(44)
  • 详解Java的static关键字

    不依赖于对象实例:静态方法不需要依赖于任何对象实例,因为它们与具体的对象实例无关联。这意味着在没有创建对象实例的情况下,就可以直接通过类名访问或调用静态方法。 可以访问静态成员:静态方法可以访问类的静态成员(静态字段和静态方法),但不能访问非静

    2024年02月05日
    浏览(51)
  • 在 C/C++中 static 关键字详解

    static 是 C/C++中的 之一, 是常见的函数与变量(C++中还包括类)的修饰符 ,它常被用来控制变量的存储方式和作用范围。 在众多高级语言中都有其作为或函数出现,所以这也是应当被程序员熟知其各种含义的一个单词 我们知道在函数内部定义的变量,当程序执

    2024年02月14日
    浏览(38)
  • 嵌入式C语言关键字(const、static、volitatile)

    C语言中const修饰通常是用来声明常量,并声明常量的值不能修改。当涉及 指针变量 时情况就会变得更加有趣,需要特别注意。因为有两样东西都有可能成为常量— 一种是用来限定指向的空间的值不可修改;另一种是限定指针不可修改 。下面是几个声明的例子: 总结:cons

    2024年02月06日
    浏览(44)
  • 【文末福利】C语言扫盲——关键字static究竟限制了谁?

    【知识科普】C语言的static究竟限制了谁? 这是一个有趣的话题,虽然说教科书给了你一些说法,但你真正能把static说清楚吗?本文将通过一个案例,给大家做一个深度的拆解分析。 注:在本文的讨论中,无明确说明时,指的都是static修饰函数,而非变量。 最近的几个月一直

    2024年02月14日
    浏览(39)
  • C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

    目录 一、前言  二、static是什么? 三、static修饰的对象是什么?   四、C 语言中的 static  🍎static的C用法  🍉static的重点概念  🍐static修饰局部变量  💦static在修饰局部变量和函数的作用  🍓static修饰全局变量和函数 💦static在修饰全局变量和函数的作用

    2024年02月05日
    浏览(47)
  • 【让你从0到1学会C语言】指针/数组传参以及static关键字

    作者:喜欢猫咪的的程序员 专栏:《C语言》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》 如果对 指针了解不多的话,请先看我的另外一篇博客: http://t.csdn.cn/0rd9D http://t.csdn.cn/0rd9D 二维数组传参: arr为二维数

    2024年02月16日
    浏览(44)
  • C语言中volatile/register/const/static/extern/auto关键字的作用

    目录 一、volatile 二、register详解 三、const详解 四、static详解 五、extern详解 语法 作用 六、auto详解 突然想总结一下这些的作用,灵活使用这些对程序的可靠性和速率都有提高 volatile是防止编译器优化,如果是高频繁的变量编译器会自动将变量放到寄存器中,但是有的变

    2024年02月07日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包