📅  最后修改于: 2023-12-03 15:28:41.674000             🧑  作者: Mango
这是一道来自于 GATE-CS-2003 的第 66 题。该题考察了程序员在编写代码时对 C 语言基础知识的掌握,同时也对其编程能力和调试能力有一定要求。接下来我们将对该题目进行详细介绍。
在 C 语言中,函数可作为参数传递。考虑以下代码片段:
int a = 10;
int fun(int *b)
{
*b = *b + a;
return (*b);
}
int main()
{
int a = 20;
int c = 30;
printf("%d ", fun(&c));
printf("%d", c);
return 0;
}
请问该程序的输出结果是什么?
A. 40 30
B. 40 40
C. 50 30
D. 50 50
请在答案选项中选择正确的选项。
该题主要考察了函数参数的传递方式、变量作用域和变量的值传递和地址传递问题。
首先,函数 fun(int *b) 的参数是一个指向整型变量的指针,表示传递的参数是一个地址而不是整型值本身。在函数中,我们将该地址所指向的整型变量的值加上全局变量 a(值为 10),然后返回该变量的值。
在 main 函数中,我们定义了三个整型变量 a、b 和 c。其中 a 的值为 20、c 的值为 30,然后依次调用函数 fun(&c) 并输出返回值和变量 c 的值。
因为在 fun 函数中进行了地址传递,所以 main 函数中的 c 的值也同时被加上了 10。因此,最终程序输出的结果为:
B. 40 40
正确答案为 B. 40 40。