📜  门| GATE-CS-2003 |第 66 题(1)

📅  最后修改于: 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。