О статическом значении в параметре функции в C - PullRequest
0 голосов
/ 15 октября 2019

каким должен быть вывод этого кода ниже? и почему? Я не уверен, что int i, объявленный в основной функции, действует как локальная переменная или нет.

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 голосов
/ 15 октября 2019

Эти вызовы функции 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.

...