gpt4 book ai didi

C:范围有问题

转载 作者:行者123 更新时间:2023-11-30 21:10:19 25 4
gpt4 key购买 nike

所以我正在准备期末考试,我们得到了这段代码L

#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而不是if中的a

最佳答案

答案是6的原因:

请注意顶部的 a 被声明为全局变量。随后,在 main 中,在代码块内调用了 addOne(a)。该代码块还定义了一个局部变量a。在该范围内传递的 a 是本地 a (53)。它被传递到接受未命名 void 变量的函数中。然而,在该函数中,有一个对 a 的引用。由于作用域的原因,这将是全局 a (5),因此 a++ 将导致输出 6。

这是一道可怕的考试题。

关于C:范围有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com