32. 以下程序的输出为(C )。
int
a=2;
int f(int *a)
{
return(*a)++;
}
void main()
{
int s=0;
{int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d %d\n",a,s);
}
A:2 7
B:2 10
C:3 7
D:3 11
#include <stdio.h>
#include <stdlib.h>
int a = 2;
int f(int *a)
{
return(*a)++; //(*a)++,是先返回*a地址内的值,然后这个函数执行以后把(*a)内值加1.
}
void main()
{
int s=0; //在c文件中是局部变量在main中最外围的{}中起作用
{
int a=5; //局部变量,a=5.它就在{}内起作用。建议写程序不要写成与全局变量同名。
s+=f(&a); //在这个{}内,s = s + f(&a)= 0 + 5 = 5
//然后(*a)内值再加1,此时在这个{}内a 变成了 6
}
s=s+f(&a); //此时s = 5,整个文件内全局变量int a = 2 ,在上一个{}内局部变量不起作用了。
//s = s + f(&a) = 5 + 2 = 7
//此时(*a)内值加1 ,a = 2 + 1 = 3
printf("a = %d, s =%d\n",a,s);//所以输出结果a = 3 ,s = 7
}
以下是codeblock内运行结果
a=3 s=7