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

时间:2019-10-15 16:09:31

标签: c function pointers reference call

下面的代码应该是什么输出?为什么呢? 我不确定在主函数中声明的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;
}   

1 个答案:

答案 0 :(得分: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