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来初始化,之后就不会再管这条语句了,你当他没有就是了。
一年多之前 回复
bloom_sssy
bloom_sssy 静态变量被赋值一次之后 在执行赋值i=0的操作就执行不了了吗
一年多之前 回复
u011514451
u011514451   2016.09.09 13:33

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

cherish_ff
cherish_ff   2016.09.09 13:42

static相当于全局变量

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!