有以下程序: #include<stdio.h> int m=1,n=2; void sub1(int m,int n) {m+=2;n++;} void sub2() {m++;n+=2;} main() {printf("%d,%d,",m,n); s

admin2021-04-28  8

问题 有以下程序:
#include<stdio.h>
int m=1,n=2;
void sub1(int m,int n)
{m+=2;n++;}
void sub2()
{m++;n+=2;}
main()
{printf("%d,%d,",m,n);
sub1(4,5);
printf("%d,%d,",m,n);
sub2();
printf("%d,%d\n",m,n);
}
程序运行后的输出结果是(    )。

选项 A、1,2,1,2,2,4
B、1,2,6,6,7,8
C、1,2,2,4,2,4
D、l,2,6,6,2,4

答案A

解析 全局变量与函数体内局部变量同名时,局部变量会覆盖全局变量,因此在subl()函数内,全局变量m,n是不可见的,在函数sub1()对m,n操作的是局部变量,对全局变量不产生影响。但在sub2()函数内,由于没有和全局变量变量重名,因此在此函数内,m,n是可见的。因此,第一个printf()打印的是全局变量m,n,故打印的是1,2,第二个printf(),调用sub1(),没有修改全局变量m,n.故打印的是1,2,第三个printf(),之前调用了sub2(),修改了全局变量m,n。因此,打印的是2,4。故答案为A选项。
转载请注明原文地址:https://kaotiyun.com/show/TCtp777K
0

最新回复(0)