2 bloom sssy bloom_sssy 于 2016.09.09 12:25 提问

static c++。。。。。。。。。。。

有一个函数:
void fun()
{
static int i=0;
cout<<"i="<<++i<<endl;
}
int main()
{
for(x=0;x<10;x++)
fun();
}
这里static int i=0;语句执行之后i的值就不能被修改了吗

4个回答

hijack00
hijack00   Rxr 2016.09.09 13:18
已采纳

可以修改,这里的static定义了一个静态变量,初始值为0。和C语言里面的static是一样的。
static变量只在程序初始运行时初始化一次,之后就会保存前一次运行的状态,例如第一次调用fun时,i自增变为1。则下一次调用fun时,i从1开始自增,变为2,以此类推

hijack00
hijack00 static int i=0这句你可以理解为一个变量声明,这是给编译器看的。告诉编译器定义个整型变量i,并且是static的,用0区初始化它。所以编译器在编译的时候就知道了这些信息。以后每次程序执行时都会用0来初始化,之后就不会再管这条语句了,你当他没有就是了。
接近 2 年之前 回复
bloom_sssy
bloom_sssy 静态变量被赋值一次之后 在执行赋值i=0的操作就执行不了了吗
接近 2 年之前 回复
u011514451
u011514451   2016.09.09 13:33

静态变量的赋值i=0的操作只执行一次

cherish_ff
cherish_ff   2016.09.09 13:42

static相当于全局变量

hijack00
hijack00 嗯嗯,如果不钻牛角尖,大部分情况下也可以这么认为
接近 2 年之前 回复
cherish_ff
cherish_ff 回复hijack00: 是的,但是在C++中我们通常可以这么认为,static分配在全局存储区,在程序整个运行期间都不会释放。也就是说static的生存周期就是全局的,但是他的作用域被限制。
接近 2 年之前 回复
hijack00
hijack00 严格来说你这句话说的不对,matlab中专门把变量分为了global和persistent,其中persistent就对应这里的静态变量,global对应全局变量
接近 2 年之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.09.09 16:36

可以被修改,想让变量只能初始化的时候赋值的关键字是const

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c中static的作用
c中static的作用c中static的作c中static的作用用
C/C++中static作用
C/C++中static作用 C/C++中static作用
static用法小结
C语言 static 用法 小结 C语言 static 用法 小结
static在C语言中主要是两种用法
static在C语言中主要是两种用法 1、修饰局部变量 2、修饰函数和全局变量 局部变量按照存储形式来分,分为auto,static,register 首先从内存四区的角度去看,auto即为普通的局部变量,存储在栈上,当函数结束时,随之释放。 register为寄存器变量,存放在寄存器里面,调用速度快。 在C语言中register变量不能取地址,会报
C语言中static用法
google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大。所以,我这篇博文博采众家之长,把互联网上的资料整合归类,并亲手编写程序验证之。          C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,
C语言static关键字解析
1、概述  static 声明的变量在C语言中有两方面的特征:  1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。  2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。2、问题:Static的理解  关于static变量,请选择下面所有说法正确的内容:  
C语言的一个关键字——static
 C语言的一个关键字——staticStatic在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数。1、Static修饰变量按照作用范围的不同,变量分为局部变量和全局变量。如果用static修饰变量,不论这个变量是全局的还是局部的都是存储在静态数据区。下面分开来讲:¨          如果用static修饰全局变量,我们称其为静态全局变量。我们用stati
Java中的static块与方法与C中的static的区别
Static 静态:这里主要记录的是静态程序块和静态方法 如果有些代码必须在项目启动的时候就执行,就需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化但是不执行,在不创建对象的情况下,可以供其他程序调用,而在调用的时候才执行,这需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用。 静态代码块和静态方法的区别是:
C语言中 static修饰函数
static修饰函数意义是:该函数只在该模块内部可见!因为在C中,函数是外部的。即不管是写在哪个文件里的函数,在其它文件里都是可见的。     为了限制一个函数仅在一个源文件里可见,可用static指示符。   不想C++语言,使用一个函数之前,必须要有该函数的签名,C与需要!测试代码://////////////////////////////////////////////te
C语言中的static inline
今天开始看Redis的源码,其中最简单的数据结果sds中用到