不一样于其余关键字,他们都有多种用法,并且在必定环境下使用,能够提升程序的运行性能,优化程序的结构。这篇文章主要介绍了C语言中静态关键字static的做用,对你们学习C语言很是有帮助。java
C语言中,static关键字修饰变量和函数:编程
一、局部变量函数
二、全局变量性能
三、函数学习
static关键字最基本的用法是:优化
一、被static修饰的变量属于类变量,能够经过类名.变量名直接引用,而不须要new出一个类来编码
二、被static修饰的方法属于类方法,能够经过类名.方法名直接引用,而不须要new出一个类来spa
被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变、到处变。JDK把不一样的静态资源放在了不一样的类中而不把全部静态资源放在一个类里面,不少人可能想固然认为固然要这么作,可是是否想过为何要这么作呢?我的认为主要有三个好处:视频
一、不一样的类有本身的静态资源,这能够实现静态资源分类。好比和数学相关的静态资源放在java.lang.Math中,和日历相关的静态资源放在java.util.Calendar中,这样就很清晰了blog
二、避免重名。不一样的类之间有重名的静态变量名、静态方法名也是很正常的,若是全部的都放在一块儿不可避免的一个问题就是名字重复,这时候怎么办?分类放置就行了。
三、避免静态资源类无限膨胀,这很好理解。
下面咱们具体了解一下static关键字的用法。
一、用静态关键字static修饰的局部变量,在编译的过程当中,会在数据区为该变量开辟空间,并对其进行初始化,若是代码中未对其进行初始化,则系统默认初始化为0。
二、用static修饰的局部变量,会延长局部变量的寿命,超出函数的生存期。
三、对静态关键字修饰的局部变量的初始化。
如下面两个变量a和变量为b进行说明,在编译过程当中,发现变量a和b是静态变量,会标识变量a与b,等到程序运行的时候,在主函数调用以前,对变量a和变量b分配空间,并对变量a进行初始化,因为变量b是由函数fun传递的参数进行初始化的,故会在程序调用函数时对变量b进行初始化,对变量b初始化以前,会检查变量b的标识位,若是标识位为0,就会拿函数参数x对其进行初始化,标识位为1就不进行初始化。
static int a = 0;(编译过程进行初始化)
static int b = x;(运行该代码的时候进行初始化)
void fun(int x)
{
static int a = 10;
static int b = x;
a++;
b++;
}
全局变量定义在函数体外部,在全局数据区分配存储空间,且编译器会自动对其初始化。
普通全局变量对整个工程可见,其余文件可使用extern外部声明后直接使用。也就是说其余文件不能再定义一个与其相同名字的变量了(不然编译器会认为它们是同一个变量)。
静态全局变量仅对当前文件可见,其余文件不可访问,其余文件能够定义与其同名的变量,二者互不影响。
在定义不须要与其余文件共享的全局变量时,加上static关键字可以有效地下降程序模块之间的耦合,避免不一样文件同名变量的冲突,且不会误使用。
函数的使用方式与全局变量相似,在函数的返回类型前加上static,就是静态函数。其特性以下:
静态函数只能在声明它的文件中可见,其余文件不能引用该函数
不一样的文件可使用相同名字的静态函数,互不影响
非静态函数能够在另外一个文件中直接引用,甚至没必要使用extern声明
下面两个文件的例子说明使用static声明的函数不能被另外一个文件引用:
/* file1.c */
#include <stdio.h>
static void fun(void)
{
printf("hello from fun.\n");
}
int main(void)
{
fun();
fun1();
return 0;
}
/* file2.c */
#include <stdio.h>
static void fun1(void)
{
printf("hello from static fun1.\n");
}
使用 gcc file1.c file2.c编译时,错误报告以下:
/tmp/cc2VMzGR.o:在函数‘main’中:
static_fun.c:(.text+0x20):对‘fun1’未定义的引用
collect2: error: ld returned 1 exit status
修改文件,不使用static修饰符,可在另外一文件中引用该函数:
/* file1.c */
#include <stdio.h>
void fun(void)
{
printf("hello from fun.\n");
}
/* file2.c */
int main(void)
{
fun();
return 0;
}
一样使用 gcc file1.c file2.c编译,编译经过,运行结果以下:
-> % ./a.out
hello from fun.
static是一个颇有用的关键字,使用得当可使程序锦上添花。固然,有的公司编码规范明确规定只用于本文件的函数要所有使用static关键字声明,这是一个良好的编码风格。
不管如何,要在实际编码时注意本身的编码习惯,尽可能体现出语言自己的优雅和编码者的编码素质。
以上就是关键字static的所有用法,但愿对你们灵活运用关键字static有所帮助。
若是你想更好的提高你的编程能力,学好C语言C++编程!弯道超车,快人一步!
【C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比本身琢磨更快哦!
编程学习书籍:
编程学习视频: