C 中静态变量的这两个声明有何不同?
How are these two declarations for static variables in C different?
为什么这段代码 --https://onlinegdb.com/AJUXuxMwt 打印 908080
但是如果此代码 https://onlinegdb.com/ft4zurpP4 打印 908081??
这两个声明有何不同,如果不是那么为什么输出不同?-
#include <stdio.h>
int fun();
static int i = 10;
int main()
{
static int i = 90;
printf("Hello World %d\n",i);
fun();
fun();
return 0;
}
int fun()
{
static int i=80;
printf("%d \n",i);
i++;
return 0;
}
static int i=80;
static int i;
我=80;
我是C的新手,刚入门但是不会把这个弄清楚
首先它不打印 908081
只有
Hello World 90
80
81
说明。
当您声明静态自动变量(函数作用域中的局部变量)时,它仅被初始化一次并在函数调用之间保留值。
static int i=80;
- 初始化只发生一次,然后 i
在函数调用之间保持其值。如果您在代码中增加 i
,当您再次调用该函数时,增加的值将被保留。
static int i; i = 80;
这种情况下不是初始化,只是正常赋值。每次调用函数时,都会执行赋值 i = 80;
,i
之后的值为 80
。
为什么这段代码 --https://onlinegdb.com/AJUXuxMwt 打印 908080 但是如果此代码 https://onlinegdb.com/ft4zurpP4 打印 908081?? 这两个声明有何不同,如果不是那么为什么输出不同?-
#include <stdio.h>
int fun();
static int i = 10;
int main()
{
static int i = 90;
printf("Hello World %d\n",i);
fun();
fun();
return 0;
}
int fun()
{
static int i=80;
printf("%d \n",i);
i++;
return 0;
}
static int i=80;
static int i; 我=80;
我是C的新手,刚入门但是不会把这个弄清楚
首先它不打印 908081
只有
Hello World 90
80
81
说明。
当您声明静态自动变量(函数作用域中的局部变量)时,它仅被初始化一次并在函数调用之间保留值。
static int i=80;
- 初始化只发生一次,然后i
在函数调用之间保持其值。如果您在代码中增加i
,当您再次调用该函数时,增加的值将被保留。static int i; i = 80;
这种情况下不是初始化,只是正常赋值。每次调用函数时,都会执行赋值i = 80;
,i
之后的值为80
。