【C语言】 Static关键字的用法和详解(太细了!!!)

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

文章目录

  • 目录

    前言

    一、static是什么

    二、static的用法

    1.修饰局部变量

    2.修饰全局变量

             3.修饰函数

    总结


前言

  static在不同的语言中又有不同的使用方法,本文介绍的是static在C语言当中的用法。


一、static是什么

  static在C语言中是关键字,中文直译过来是“静态的”,static关键字在C语言中主要是用来修饰变量和函数。

二、static的用法

1.修饰局部变量

  ——称为静态局部变量

static修饰局部变量时,会改变局部变量的存储位置,从而使得局部变量的生命周期变长

  我们用一段代码来进行详解:

void test()
{
	int x = 0;
	x++;
	printf("%d ", x);
}

int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

  这段代码中每次调用test()函数时创建局部变量x赋值为0,每次局部变量x出了test()函数后都会自行销毁。

  所以可以很容易得到输出结果为:1 1 1 1 1 1 1 1 1 1


  接着我们用上static关键字来修饰test()函数中的局部变量x:

void test()
{
	static int x = 0;
	x++;
	printf("%d ", x);
}

int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

  输出结果变成了:1 2 3 4 5 6 7 8 9 10

  原因是static修饰了局部变量x,令局部变量x变成静态的,使得每次test()函数结束时局部变量x都不销毁,再次进入test()函数时则保留原有数值运行,因此x++数值越来越大。

其本质是:

  普通的局部变量创建后是放在栈区中,这种局部变量进入作用域时创建,出了作用域就销毁;

  但static修饰后的局部变量则放在静态区中,它改变了局部变量的存储位置,从而使得变量的生命周期延长,延长至程序结束才销毁。

注意:static修饰局部变量只改变生命周期,不改变作用域!


2.修饰全局变量

  ——称为静态全局变量

  static修饰全局变量时,会改变全局变量的链接属性,从而使得全局变量的作用域变小

  这段话什么意思呢,先来简单说说全局变量

  全局变量的作用域十分的广,只要在一个源文件中定义后,这个程序中的所有源文件、对象以及函数都可以调用,生命周期更是贯穿整个程序。文件中的全局变量想要被另一个文件使用时就需要进行外部声明(以下用extern关键字进行声明)。

  接着我们用代码进行解析:

【C语言】 Static关键字的用法和详解(太细了!!!)

  全局变量x在自己的文件内可以直接使用。

  但当全局变量在另一个文件内未进行外部声明就想直接用时会出现未定义的错误:

【C语言】 Static关键字的用法和详解(太细了!!!)

【C语言】 Static关键字的用法和详解(太细了!!!)

   此时只要使用extern关键字声明一下即可:

【C语言】 Static关键字的用法和详解(太细了!!!)

   接着我们进入正题,当我们用static修饰全局变量x后:

 【C语言】 Static关键字的用法和详解(太细了!!!)

 【C语言】 Static关键字的用法和详解(太细了!!!)

  会发现生成错误,无法解析外部符号x,全局变量x不能被test.c文件调用了。所以我们可以很容易看出static修饰后让全局变量x的作用域变小了,令全局变量x无法被其他文件调用。

其本质是:

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

    但如果全局变量被static修饰,那这个外部链接属性就会被修改成内部链接属性,此时这个全局变量就只能在自己的源文件中使用;

3.修饰函数

  ——称为静态函数

  static对函数的修饰与修饰全局变量十分相似,修饰函数时会改变函数的链接属性,从而使得函数的作用域变小

  我们直接上代码:

【C语言】 Static关键字的用法和详解(太细了!!!)

【C语言】 Static关键字的用法和详解(太细了!!!)

  函数在另一个文件中使用时同样需要声明。

  但当函数被static修饰后:

【C语言】 Static关键字的用法和详解(太细了!!!)【C语言】 Static关键字的用法和详解(太细了!!!)

  会发现Add函数无法被解析了,static修饰后Add函数的作用域变小了。

本质和全局变量很像:

  函数本身也是有外部链接属性的;

  被static修饰后,函数的外部链接属性修改成内部链接属性,使得这个函数只能在自己的源文件内被使用,因此函数的作用域就变小了。


总结

  以上就是要说的内容,本文仅仅简单介绍了static在C语言的使用,static在其他语言中还有更多的使用方法。本文是小编的第一篇知识总结,如有不足的地方欢迎大佬们在评论区指出。也还望各位觉得有用的话一键三连+关注,谢谢!文章来源地址https://www.toymoban.com/news/detail-413181.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)
  • C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中, static 和 const 的有哪些用法? 二师兄: satic 主要用在以下三个方面:1.用在全局作用域,修饰的变量或者函数为静态的,限制在本文件内使用。2.方法内修饰修饰静态局部变量,在第一次访问

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

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

    2024年02月05日
    浏览(51)
  • [开发语言][c++]:Static关键字和全局变量

    写在前面: 如果您只是想回顾或了解一下static和全局变量的异同点,那么下面的总结将满足您的需求。 如果您是一位初学者或对二者的使用模棱两可,建议您读完该篇文章,相信这一篇将解答完您对于static以及全局变量的所有疑惑。 如有问题或建议欢迎评论 or 私信

    2024年01月20日
    浏览(58)
  • 在 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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包