c语言静态函数讲解和使用 c语言函数中的静态变量

c语言中static的作用和用法static关键字不仅可以用来修饰变量,还可以用来修饰函数 。在使用 static 关键字修饰变量时 , 我们称此变量为静态变量 。静态变量的存储方式与全局变量一样,都是静态存储方式 。静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量 。
在C语言中,static关键字的作用如下:
在修饰变量的时 , static修饰的静态局部变量只执行一次 , 而且延长了局部变量的生命周期 , 直到程序运行结束以后才释放 。
static修饰全局变量的时 , 这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以 。
static修饰一个函数,则这个函数的只能在本文件中调用 , 不能被其他文件调用 。Static修饰的局部变量存放在全局数据区的静态变量区 。
C的static用法:
面向过程程序设计中的static和面向对象程序设计中的static 。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用 。
在类中,static可以用来修饰静态数据成员和静态成员方法 。
静态数据成员:
静态数据成员可以实现多个对象之间的数据共享 , 它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值 , 则各对象中这个数据成员的值都被改变 。
静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间 。
静态数据成员既可以通过对象名引用,也可以通过类名引用 。
静态成员函数:
静态成员函数和静态数据成员一样,他们都属于类的静态成员 , 而不是对象成员 。
非静态成员函数有this指针,而静态成员函数没有this指针 。
静态成员函数主要用来方位静态数据成员而不能访问非静态成员 。
C语言中static是做什么用的?有两种用法c语言静态函数讲解和使用:
1、static修饰局部变量c语言静态函数讲解和使用,成为一个局部静态变量 。
static修饰局部变量(静态局部变量)与普通局部变量相比,它c语言静态函数讲解和使用的优势在于:
①静态局部变量作用域与连接属性与普通局部变量一样c语言静态函数讲解和使用;
②存储类:静态局部变量分配在data/bss段,普通局部变量在栈上;
③生命周期:因为存储类c语言静态函数讲解和使用的不同 , 静态局部变量的生命周期得到延长了,直到程序结束 。
2、static修饰全局变量与函数,成为静态全局变量与静态函数 。
static修饰全局变量\函数 与 普通全局变量\普通函数相比,它的优势在于:
①存储类、生命周期、作用域都一样;
②差别在于static修饰全局变量\函数连接属性是内连接 , 普通全局变量\普通函数是外链接;
③就是说static修饰全局变量\函数不能跨文件访问调用 。
扩展资料:
在类内数据成员的声明前加上static关键字,该数据成员就是类内的静态数据成员 。其特点如下:
静态数据成员存储在全局数据区,静态数据成员在定义时分配存储空间,所以不能在类声明中定义
静态数据成员是类的成员,无论定义了多少个类的对象,静态数据成员的拷贝只有一个,且对该类的所有对象可见 。也就是说任一对象都可以对静态数据成员进行操作 。而对于非静态数据成员,每个对象都有自己的一份拷贝 。
由于上面的原因 , 静态数据成员不属于任何对象,在没有类的实例时其作用域就可见,在没有任何对象时 , 就可以进行操作
和普通数据成员一样,静态数据成员也遵从public, protected, private访问规则
静态数据成员的初始化格式:数据类型类名::静态数据成员名=值
类的静态数据成员有两种访问方式:类对象名.静态数据成员名 或 类类型名::静态数据成员名
C语言中static函数的具体作用是什么?C语言中static函数的具体作用是:
让一个变量长期有效,而不管其是在什么地方被申明 。
避免多个文件使用了相同的变量名而导致冲突 。
C语言里面的静态函数和函数的区别是:
静态函数是函数的一种,函数包括静态函数和非静态函数两种 。
静态函数是有static修饰的函数 , 如果没有,则为非静态函数(全局函数) 。
当整个程序只有一个C文件时,二者没有区别,当程序是由多个C文件组成时 , 二者的作用域,即可使用的范围不同 。
静态函数(带static的),只能在本文件中使用 , 无法跨文件,而非静态函数(不带static的) , 可以在任何一个文件中使用 。当在其它文件中使用时,需要做函数声明后再使用 。
计算机c语言中什么是静态函数静态函数(带static的),外部文件无法使用该函数了 , 同样的是定义静态变量后,外部文件同样不能使用;在工程中,通常各个模块分开完成,这时候如果确定自己定义的函数别的文件不会使用 , 就可以加上static , 以保证不会被误用;只能在本文件中使用,无法跨文件 。
静态函数是函数的一种,函数包括静态函数和非静态函数两种 。
其中静态函数是有static修饰的函数,如果没有,则为非静态函数(全局函数) 。
静态函数(带static的),只能在本文件中使用,无法跨文件 。而非静态函数(不带static的),可以在任何一个文件中使用 。当在其它文件中使用时 , 需要做函数声明后再使用 。
static 定义的函数,怎么使用static定义变量的使用:
一、静态局部变量:
1、Static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样c语言静态函数讲解和使用,是某个特定函数的局部变量c语言静态函数讲解和使用 , 即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用 , 都将一直存在;不过,尽管该变量还继续存在,但不能使用它 。倘若再次调用定义它的函数时 , 它又可继续使用,而且保存c语言静态函数讲解和使用了前次被调用后留下的值 。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量 。
2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行) 。而对自动变量赋初值是在函数调用时进行 , 每调用一次函数重新给一次初值,相当于执行一次赋值语句 。
3、静态局部变量的初始化表达式必须是一个常量或者常量表达式 。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0 。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值 。
4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量 。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用 , 因此仍以采用局部静态变量为宜 。
注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量 。
二、静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量 。
全局变量本身就是静态存储方式 , 静态全局变量当然也是静态存储方式 。
这两者在存储方式上并无不同 。
这两者的区别虽在于:
1、非静态全局变量的作用域是整个源程序 , 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的 。
2、静态全局变量则限制了其作用域 , 即只在定义该变量的源文件内有效 , 在同一源程序的其它源文件中不能使用它 。
由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误 。
从以上分析可以看出
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期 。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围 。
因此static这个说明符在不同的地方所起的作用是不同的 。应予以注意 。
static定义变量的使用:
一、静态局部变量:
1、Static类内部变量同auto自动变量(即未加 Static 声明的局部变量)一样 , 是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,2者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会 , 它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它 。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值 。换言之,Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量 。
2、函数体内如果在定义静态变量的同时进行了初始化 , 则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行) 。而对自动变量赋初值是在函数调用时进行 , 每调用一次函数重新给一次初值,相当于执行一次赋值语句 。
3、静态局部变量的初始化表达式必须是一个常量或者常量表达式 。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0 。而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值 。
4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量 。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜 。
注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量 。
二、静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量 。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式 。
这两者在存储方式上并无不同 。
这两者的区别虽在于:
1、非静态全局变量的作用域是整个源程序 , 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的 。
2、静态全局变量则限制了其作用域 , 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它 。
【c语言静态函数讲解和使用 c语言函数中的静态变量】由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误 。
把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期 。
把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围 。
因此static这个说明符在不同的地方所起的作用是不同的 。应予以注意 。
关于c语言静态函数讲解和使用和c语言函数中的静态变量的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读