Static是什么意思啊,在C程序里面

Static是什么意思啊,在C程序里面,第1张

static可应用于应用于内部变量、外部变量和函数。应用于内部变量时,其作用是用来指定变量的存储类别为静态变量。应用于外部变量和函数时,其作用是限制变量或函数的作用范围仅限于外部变量或函数所在的源文件。

1、在整个程序运行的过程中,无论静态内部变量所在的函数被调用了多少次,静态内部变量只运行一次初始化,即在程序运行时完成的。

2、在函数的两次调用期间,静态内部变量所在存储单元不被释放,因而当前次函数调用执行时其值会被保存下来,下次调用时该值依然存在。即静态内部变量的值在从一次函数调用到下一次函数调用到下一次函数调用到下一次函数调用之间保持不变。

3、 默认情况下,外部变量的作用域是从定义变量的位置到所在源文件的末尾。

一、函数分为内部函数和外部函数

当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。

1、内部函数(又称静态函数)

如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。

定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:

static 函数类型 函数名(函数参数表){……}

关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

2、外部函数

外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:

[extern] 函数类型 函数名(函数参数表){……}

调用外部函数时,需要对其进行说明:

[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

二、C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

扩展资料:

static的作用

在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。

1、最重要的一条:隐藏。

同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

2、static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

3、static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。

如果定义成静态的,就省去了一开始置0的 *** 作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加’\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是’\0’。

最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。

参考资料来源:

百度百科-static函数

百度百科-c语言

static是静态变量,也就是说在程序执行之前就分配内存,直到程序退出才释放内存。

所以static变量在程序执行过程中它的值将一直保留。而普通的成员变量在一个类被销毁后它的值也就消失,每次调用,又重新分配内存地址和值

//static变量是属于类的,程序结束后,类所占空间会被回收,

//那么static变量自然也就被销毁了。给你个例子:

public class TestStatic001 {

public static void main(String[] args){

MyStatic.num ++

System.out.println(MyStatic.num)

}

}

public class TestStatic002 {

public static void main(String[] args){

System.out.println(MyStatic.num)

}

}

public class MyStatic {

static{System.out.println("被加载……")}

public static int num = 15

}

//当运行TestStatic001时,会打印MyStatic类的静态块消息,

//且static变量值打印为16,

//运行TestStatic002时也会打印MyStatic类的静态块消息,

//且static变量值为15,如果它在程序一结束后没被销毁,

//那么程序二时就也应该是16的(static变量只会有一个),

//因此可以看出,static变量在程序运行结束后是会被销毁的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12003281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存