关于 C 函数参数中的静态值

About a static value in function's parameter in C

下面这段代码的输出应该是什么?为什么? 我不确定我在 main 函数中声明的 int 是否像局部变量一样。

static int i = 3;
void f(int*j){
    j++;
}
int g(int* j){
    return i+=*j;
}
void h(int j, int k){

    printf("%d,%d,%d\n", i,j,k);

}
int main(){
     int i = 3;
     int j = 5;
     int *p = &i;
     f(&i);
     f(p);
     for(;i<5;i++){
        *p = g(p);
    }
    h(i,j);
    return 0;
}   

函数的这些调用f

 f(&i);
 f(p);

没有影响。

在函数 g 中改变了全局变量 i

int g(int* j){
    return i+=*j;
}

由于函数在循环中被调用

 for(;i<5;i++){
    *p = g(p);
}

一次 i 等于 3 那么全局变量 i 将等于 i + 3 = 6。局部变量 i 将等于函数返回的全局变量 i (等于 6)的值,然后在循环中递增。所以在退出循环后它将等于 7..

这次通话

h(i,j);

输出全局变量 i 并将局部变量 ij 作为参数传递。所以它的输出将是 6,7,5.