首页 > 其他分享 >C语言中static静态关键字

C语言中static静态关键字

时间:2024-04-01 23:32:14浏览次数:23  
标签:函数 局部变量 C语言 源文件 关键字 static 修饰 全局变量

在c语言编写代码中,常见的static静态关键字用于修饰局部变量、修饰全局变量和修饰函数方法。本人也将从这三方面对static关键字的用法进行概要解释。

修饰局部变量

局部变量主要体现在函数方法里面的变量,咱这边直接上代码看区别:

①这个是不加static关键字修饰的局部变量:

②这个是加了static关键字修饰局部变量:

通过两组的对比不难发现,使用了static修饰局部变量后,sums函数方法在结束后,并未释放销毁局部变量x的值,一直保留存储着sums函数结束后x局部变量的最后的值,当main函数第一次循环进入sums函数后,打印x=0后,x自增1,此时x为1;当main函数第一次循环进入sums函数后,打印x=1后,x自增1,此时x为2,以此类推。这里通过变量存储的方式和生命周期解释一下为什么出现这样的情况:

我把尝试的代码放下面,可以自己去试一下:

#include<stdio.h>
#include<windows.h>
#include<math.h>

void sums(){
	int x=0;
	/*static int x=0;*/
	printf("%d\n",x);
	x++;
	
}
int main()
{
	int a=0;
	while(a<3){
		sums();
		a++;
	}
	return 0;
}

修饰全局变量

本人将用同一项目下两个不同的源文件来简述static修饰全局变量。

①未使用static修饰全局变量的情况:

②使用static修饰全局变量的情况:

使用static修饰全局变量出现问题,这里我们运行一下在sample源文件下可不可以打印变量a:

通过对比,可知static修饰全局变量,将全局变量的外部连接属性转变为内部连接属性,导致在同一项目下的其它源文件不能使用该源文件的全局变量,综上,static修饰全局变量使全局变量的使用范围变小(只能在当前源文件使用,不能被其它源文件使用)。

修饰函数

先说结论,static修饰函数使函数的使用范围变小(只能在当前源文件使用,不能被其它源文件使用),原因也是将函数的外部连接属性转变为内部连接属性,导致在同一项目下的其它源文件不能使用该源文件的函数。

①未使用static修饰全局变量的情况:

②使用static修饰全局变量的情况:

使用static修饰函数出现问题,这里我们运行一下在sample源文件下可不可以调用函数sums():

这无不表明一件事,static修饰函数和修饰全局变量用法大差不差

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

相关文章

  • C语言——指针
    地址是由物理的电线上产生的,能够标识唯一一个内存单元。在C语言中,地址也叫做指针。在32位机器中,有32根地址线。地址是由32个0/1组成的二进制序列,也就是用4个字节来存储地址。在64位机器中,有64根地址线。地址是由64个0/1组成的二进制序列,也就是用8个字节来存储地址。指针类型......
  • c语言程序实验——实验报告四
    c语言程序实验————实验报告四实验项目名称:实验报告2数据描述实验项目类型:验证性实验日期:2024年3月21日一、实验目的1.在熟练掌握if语句和switch语句的基础上,能灵活使用if语句和switch语句进行选择结构的程序设计2.学习调试程序二、实验硬、软件环境Windows......
  • 2_C语言分支与循环
    C语言分支与循环分支break与continueif与elseswitch练习题循环forwhiledowhile练习题分支break与continuebreak:使流程跳到循环体之外,接着执行循环体下面的语句其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终......
  • C语言 指针
    目录1.指针是什么?2.指针和指针类型2.1指针的解引用2.2指针加减整数3.野指针3.1指针未初始化3.2指针越界访问4.指针运算4.1指针加减整数4.2指针减指针4.3指针的关系运算5.指针和数组例1 例26.二级指针7.指针数组8.结语1.指针是什么?把内存单一的编号就......
  • 每日一题:C语言经典例题之门禁系统
    题目描述毛毛最近要负责图书馆的管理工作,需要记录下明天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,得到每一条记录中的读者是第几次出现。输入输入的第1行包含一个整数n,表示涛涛的记录条数;第2行包含n个整数,依次表示涛涛的记录中每......
  • 菜鸟记录:c语言实现PAT甲级1010--Radix
    很长时间没做,忙于考研和实习,久违的的拾起了算法。做了很长时间,其实总体思路还是很简单的,但满分不知道为什么就是到不了,又因为网上很多答案包括柳神的都是c++,无法参透,姑且只能这样了。Givenapairofpositiveintegers,forexample,6and110,canthisequation6=110bet......
  • C语言中常用的文件操作
    本文将介绍常用的关于文件操作函数,如fopen,fclose,fread,fwrite,feek,ftell,rewind以及feof和ferror等文件操作操作函数,还介绍一些用于所有输入输出流的函数如fgetc,fputc,fgets,fputs,fprintf,fscanf等函数,还介绍了sscanf,sprintf函数,feof和ferror函数。最后介绍了文件文件缓......
  • Django项目部署本地windows IIS(详细版)和static文件设置(页面样式正常显示)
    Django项目部署本地windowsIIS(详细版)和static文件设置(页面样式正常显示)原文链接:https://blog.csdn.net/hahahahanhanhan/article/details/134638020目录必要条件:一、下载并启用wfastcgi二、window安装IIS功能三、IIS管理器中添加网站1、复制项目2、复制wfastcgi.py文件......
  • 初识编译和链接(C语言)
    文章目录编译和链接翻译环境预处理编译汇编链接运行环境编译和链接编译和链接这两个大的过程构成了翻译环境。其实,在ANSIC的任何一种实现中,存在两个不同的环境。一个环境是翻译环境,另一个是执行环境。翻译环境中,源代码被转换为可执行的机器指令。执行环境中,代......
  • c语言实现扫雷游戏
    c语言实现扫雷游戏写在前面:呃呃呃其实是代码写完了才写的这篇文章,所以中间的测试就看不到(害,那么进入游戏首先应当是有一个菜单界面,供玩家选择开始游戏还是退出游戏,对吧菜单界面实现那么就写一个打印菜单的函数咯然后主函数部分调用一下menu(),再根据玩家的选择来判......