static int x=0;和static int x;x=0;为什么不一样呢?

intx=0和intx;x=o;有区别吗?是不是加了static在前面就发生变化了啊?你两个怎么回答的答案刚刚相反啊,谁可以肯定自己是对的?

第1个回答  推荐于2017-09-03
被static 修饰的变量总是存在内存的静态区,所以即使这个函数运行结
束,这个静态变量的值还是不会被销毁,且static行只执行一次。
static int x=0;定义并赋值,每次对x的改变都会保存到x分配的内存中。
而static int x;x=0;定义后才赋值。所以在没有执行x=0前,x分配的内存中的值初始一般为0。
如例子:
# include <stdio.h>
static int j;
void fun1(void)
{
static int i = 0;
i++;
}
void fun2(void)
{
j = 0;
j++;
}
int main()
{
int k;
for(k=0; k<10; k++)
{
fun1();
fun2();
}
return 0;
}

j的最终值为1,i的最终值为10.
例子是《C 语言深度解剖》-陈正冲中的例子本回答被提问者采纳