C++面向过程的static和C的是一样的。 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
c语言static的作用和用法 c语言static的作用
1、静态全局变量
在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:
//Example 1
void fn();
static int n; //定义静态全局变量
{ n=20;
fn();
}void fn()
}静态全局变量有以下特点:
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:
代码区
全局数据区
堆区
栈区
一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静 态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:
静态全局变量不能被其它文件所用;
其它文件中可以定义相同名字的变量,不会发生冲突;
您可以将上述示例代码改为如下:
//Example 2//File1
void fn();
static int n; //定义静态全局变量
{ n=20;
fn();
}//File2
extern int n;
}编译并运行Example 2,您就会发现上述代码可以分别通过编译,但运行时出现错误。 试着将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
再次编译运行程序,细心体会全局变量和静态全局变量的区别。
我们先举一个静态局部变量的例子,如下:
//Example 3
void fn();
fn();
fn();
}void fn()
{ static int n=10;
n++;
}通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。
静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。
该变量在全局数据区分配内存;
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
3、静态函数
静态函数的例子:
//Example 4
static void fn();//声明静态函数
{fn();
}void fn()//定义静态函数
{ int n=10;
}定义静态函数的好处:
静态函数不能被其它文件所用;
其它文件中可以定义相同名字的函数,不会发生冲突;
静态局部变量(静态变量)是在编译时赋初值的,即值赋初值一次,在程序运行时它已有初值,以后每次调用函数式不在重复赋初值而只在保留商城函数调用结束时的值。
使被调用函数调用结束后,被调用函数中的静态变量不会被释放,并保留上一次调用的值
#include"stdio.h"
int a=2,i;
for(i=0;i<3;i++)
}int f(int a)
{auto int b=0; //aubo为自动变量的标志,则b为自动变量
static int c=3;//static 为静态局部变量的标志,则c为静态局部变量
b=b+1; //b为自动变量,则b一直等于1
c=c+1; //c为静态局部变量,则c随着for循环分别为4,5,6
return(a+b+c);
}所以运行的以上就是static关键字的作用是什么的全部介绍,如果你想了解更多有关Ja教程,请关注php中文网。结果为:7,8,9
注:静态局部变量(静态变量)是在编译时赋初值的,即值赋初值一次,在程序运行时它已有初值,以后每次调用函数式不在重复赋初值而只在保留商城函数调用结束时的值。
静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。
例如:
static unsigned char i;
static int n=0;定义n为静态局部变量。静态局部变量只初始化一次,下次调用函数时,保持上次函数调用后的值。
因此,f(++n),即f(1)(前置自增,先自增,再传参数),返回1,同时,下次调用时f中的n=1,main中的n=1。
f(n++),即f(1)(后置自增,先传参数,再自增),返回2(因为f中的n保持上次调用的值1,n+=m;即n=n+m=1+1=2;),同时,下次调用时f中的n=2,main中的n=2。
static表示该变量为静态,简单来说你可以理解为int f函数里面的int n=0;只执行一次,第二次printf的时候,进入到函数f,n不会被重置为0,而还是之前的值1。
有点像全局变量,只是这个变量只在当前的cpp有效,而全局变量是整个项目有效。
函数f中的n只会被初始化一次,再次调用时,函数就是全局变量啊,比如如果需要计数然后那个函数需要一次次的被重新利用,那就需要静态变量了啊,静态变量不会因为局部函数被清空而清空而是会一直被保留f中的n=上次调用后n的值;
作用于整个程序中,相当于全局变量 ,不过它可以定义在程序的任何地方,比如函数内,只要变量前加了 static ,这部分变量对应的内存就不会被回收,直到程序结束。
2.在函数外用来定义变量时他会使得这个变量只在该文件中可见,也即其他文件是无法访问的,哪怕加了extern!static有两个用途:1.在函数中用来定义变量时,使这个变量变为一个静太分配的变量,也即函数调用结束后该变量仍然存在,并且他只会初始化一次,且这个初始化是在编译阶段完成的.
作用于整个程序中,属于全局变量
分类
static
函数内部函数和外部函数
当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
内部函数
(又称静态函数)
如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
static
函数类型
函数名(函数参数表)
{……}
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
外部函数
外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:
[extern]
函数类型
函数名(函数参数表)
{……}
[extern]
函数类型
函数名(参数类型表)[,函数名2(参数类型表2)……];
[案例]外部函数应用。
(1)文件mainf.c
main()
{extern
input(…);
process(…);
output(…);
}(2)文件subf1.c
……
extern
input(……)
/定义外部函数/
{……}
(3)文件subf2.c
……
extern
process(……)
/定义外部
函数/
{……}
(4)文件subf3.c
……
extern
output(……)
/定义外部函数/
{……}
c语言中变量一共有四种变量存储类,分别为:
auto(自动变量)
register(寄存器变量)
static(静态变量)
还有一个是外部变量{int f(int);。
你可以去百科一下了解详细情况。
static int f = 1; 该语句无论循环多少次,只会执行次,也就是说,次初始化为f=1;
void第二次进入循环的时候 就意味着将static int f = 1;这句话屏蔽掉了
次:f=1,i=1,f=fn=fi=11=1;
第二次:f=1,i=2,f=fn=fi=12=2;
第四次:f=6,i=4,f=fn=fi=64=24;
次:f=24,i=5,f=fn=fi=245=120。
答:在C语言中,stati但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。c主要定义全局静态变量,定义局部静态变量,定义静态函数
(1) 在全局数据区input(…),process(…),output(…);内分配内存
(2) 如果没有初始化,其默认值为0
(3) 该变量在本文件内从定义开始到文件结束可见
二、 定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:
(1) 该变量在全局数据区分配内存
(2) 如果不显示初始化,那么将被隐式初始化为0
三、 定义静态函数:在函数的返回类型加上static关键字,函数即被定义成静态函数。静态函数有以下特点:
(1) 静态函数只能在本源文件中使用
(2) 在文件作用域中声明的inline函数默认为static
说明:静态函数只是一个普通的全局函数,只不过受static限制,他只能在文件坐在的编译单位内使用,不能呢个在其他编译单位内使用。
通过C语言撰写程序,经典的函数是static。
在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0。
如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。
Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 a13828211729@163.com 邮箱删除。