文章

2

粉丝

0

获赞

1

访问

129

头像
【C语言 P1026 答疑】在函数调用时,以下说法正确的是
我要提问
发布于2025年11月10日 16:54
阅读数 46

题目链接:在函数调用时,以下说法正确的是
请在下方描述您遇到的问题:
答案

登录查看完整内容


登录后发布评论

1 条评论
snake
2025年11月11日 17:40

要解决这道题,需逐一分析每个选项,结合函数调用的核心规则(参数作用域、返回值、数据传递方式、文件组织)判断对错:

选项 A:错误

函数分为有返回值函数(如int add(int a, int b))和无返回值函数(用void声明,如void printMsg())。无返回值函数调用后不需要带回任何返回值,仅执行特定操作(如打印、修改全局变量等)。因此 “必须带回返回值” 的说法不成立。

选项 B:正确

形式参数(简称 “形参”)是函数定义时的参数(如int add(int x, int y)中的xy),作用域仅限于函数内部(局部变量);实际参数(简称 “实参”)是函数调用时传入的参数(如add(3, 5)中的35,或int a=3, b=5; add(a,b)中的ab),作用域在主调函数中。

由于两者的作用域相互独立,同名不会产生冲突。例如:

#include <stdio.h>
// 形参为a、b(局部作用域)
int add(int a, int b) {
    return a + b;
}
int main() {
    // 实参也为a、b(主函数作用域)
    int a = 1, b = 2;
    printf("%d", add(a, b)); // 输出3,同名无冲突
    return 0;
}

选项 C:错误

函数间的数据传递有 3 种常见方式:参数传递(值传递、地址传递)、返回值传递全局变量传递。全局变量的作用域是整个程序(若未用static限制),主调函数和被调函数均可访问、修改全局变量,从而实现数据传递。例如:

#include <stdio.h>
int g_val = 0; // 全局变量
void setVal() {
    g_val = 10; // 被调函数修改全局变量
}
int main() {
    setVal();
    printf("%d", g_val); // 主调函数访问修改后的全局变量,输出10
    return 0;
}

因此 “不可以使用全局变量” 的说法错误。

选项 D:错误

主调函数和被调函数可以分布在不同文件中(多文件编程场景)。只要在主调函数所在文件中声明被调函数的 “函数原型”,并正确链接编译,即可调用其他文件中的函数。例如:

  • 文件 1(func.c):定义被调函数int add(int a, int b) { return a + b; }

  • 文件 2(main.c):主调函数(声明函数原型后调用)#include <stdio.h>int add(int a, int b); // 函数原型声明int main() { printf("%d", add(3,5)); return 0; }

编译时链接两个文件(如gcc main.c func.c -o main),程序可正常运行。因此 “总是在同一个文件里” 的说法错误。

正确答案:B

赞(0)
回复给: