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;
}
  1. static int i=80;

  2. static int i; 我=80;

我是C的新手,刚入门但是不会把这个弄清楚

首先它不打印 908081 只有

Hello World 90
80 
81 

说明。

当您声明静态自动变量(函数作用域中的局部变量)时,它仅被初始化一次并在函数调用之间保留值。

  1. static int i=80; - 初始化只发生一次,然后 i 在函数调用之间保持其值。如果您在代码中增加 i,当您再次调用该函数时,增加的值将被保留。

  2. static int i; i = 80; 这种情况下不是初始化,只是正常赋值。每次调用函数时,都会执行赋值 i = 80;i 之后的值为 80