关于 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
并将局部变量 i
和 j
作为参数传递。所以它的输出将是 6,7,5
.
下面这段代码的输出应该是什么?为什么? 我不确定我在 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
并将局部变量 i
和 j
作为参数传递。所以它的输出将是 6,7,5
.