这个有错误吗,如果没有,输出的是什么?
#include <stdio.h>
int a=2;
int f(int *a)
{
return (*a)++;}
void main()
{
int s=0;
{
int a=5;
s+=f(&a);}
s+=f(&a);
printf("s=%d\n",s);
printf("a=%d\n",a);}
(因为在一个编译器是输出s=7 a=3,但是在另一个不同的编辑器是语法错误,但是试卷上的答案是s=7 a=2);希望有人详细给我说明运行过程,不懂为什么这样、
[解决办法]
试卷错了。
第1次执行s+=f(&a)是,a是局部变量,s变成5
第2次执行s+=f(&a)是,执行前,a是全局变量(a=2),执行完成后,s变成7,a变成3
[解决办法]
//反问:你说的不同编译器有语法错误??我试了几个都没问题,楼主说的是哪个??#include <stdio.h>int a = 2;int f(int *a){ return (*a)++;} void main(){ int s = 0; { int a = 5; printf("la1 = %d\n", a);//局部变量覆盖全局变量 输出a=5 s += f(&a); printf("la2 = %d\n", a);//调用函数传递给函数参数的是局部变量的地址所以此时函数里对局部变量进行了修改函数返回后a=6 } printf("ga1 = %d\n", a);//上大括号后局部变量生命周期结束,其空间被释放,此时打印的是全局变量a=2 s += f(&a);//调用函数传递给函数参数的是全局变量的地址所以此时函数里对全局变量进行了修改出来时a=3,如果此时问函数返回的值是多少?答案是2 printf("s = %d\n",s);//而s从始到此没有被释放和覆盖所以它的值自然是7. printf("a = %d\n",a);}