所以我正在学习决赛,我们得到了这个代码块
#include <stdio.h>
int a;
void addOne(void) {
a++;
printf(“W. a = %d\n”, a);
}
int removeOne(int a) {
int b = a – 1;
printf(“R. b = %d\n”, b);
}
void swap(int a, int *b) {
int temp = a;
a = *b;
*b = temp;
}
int main() {
a = 5;
int b = 20;
if (b > 15) {
int a = 53;
removeOne(b);
addOne(a);
printf(“X. a = %d\n”, a);
}
printf(“Y. a = %d, b = %d\n”, a, b);
swap(a, &b);
printf(“Z. a = %d, b = %d\n”, a, b);
return 0;
}
我们被要求提供该计划的输出。我遇到了addone(a)
我遇到的问题54,正确答案是6.它是6因为当声明函数时它有void
(不记得技术术语)但是它对函数的信息而不是int a
之类的东西?
我更直接的问题是,为什么函数会在主函数中初始化a
而不是a
中的if
?
答案 0 :(得分:0)
答案是6的原因:
请注意,a
被声明为全局。稍后,在main
中,代码块内部会调用addOne(a)
。该代码块也定义了局部变量a
。在该范围内传递的a
是本地a
(53)。它被传递给一个接受未命名的void
变量的函数。但是,在该函数中,引用了a
。由于范围界定,这将是全局a
(5),因此a++
将导致输出为6.
这是一个可怕的考试问题。