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

标签 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;
}   

最佳答案

函数 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并将局部变量 i 作为参数传递和j 。所以它的输出将是 6,7,5 .

关于c - 关于C中函数参数的静态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398778/

相关文章:

c - 传递目录作为参数并显示其最后修改日期

c - 如何使用c程序运行其他可执行文件

c - C 中的 Brick-Breaker - 递增砖行问题

c++ - 为什么我的函数会出现乱七八糟的 cout 语句?

c++ - 使用 malloc 与 new

pointers - Julia:如何获取指针指向的数组?

C 如何正确使用sscanf support

Javascript - 将参数传递给调用另一个函数的函数

c++ - 复合参数声明

c - 使用函数在数组中查找最大和最小数