You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请解释下述C语言程序运行输出数值2的具体执行逻辑

C语言代码执行逻辑与结果推导
#include <stdio.h>

int fun1(int a, int  b) {
    a = a - 3;
    b = a / 2;
    return b;
}

int main() {
   int a = 10;
   int b = 17;
   int c = fun1(b, a);
   int d = fun1(c, b);
   printf("%d", d);
}

核心前置规则:C语言值传递机制

C语言函数参数默认采用值传递规则:

  • 形参是实参的独立拷贝,修改形参不会影响函数外部的实参
  • 参数匹配仅按位置对应,和形参、实参的变量名无关

逐流程推导

第一步:main函数初始化局部变量

  • 局部变量a赋值为10
  • 局部变量b赋值为17

第二步:计算c = fun1(b, a)

传参按位置匹配,传入的第一个实参是main.b的值17,第二个实参是main.a的值10,对应fun1的形参初始值:fun1.a = 17,fun1.b = 10

  • fun1执行第一行:a = a -3 → 17-3=14,fun1.a更新为14
  • fun1执行第二行:b = a / 2 → 14/2=7,fun1.b更新为7
  • fun1返回7,因此main.c赋值为7

第三步:计算d = fun1(c, b)

传参按位置匹配,传入的第一个实参是main.c的值7,第二个实参是main.b的值17,对应fun1的形参初始值:fun1.a =7,fun1.b=17

  • fun1执行第一行:a = a -3 →7-3=4,fun1.a更新为4
  • fun1执行第二行:b = a /2 →4/2=2,fun1.b更新为2
  • fun1返回2,因此main.d赋值为2

第四步:输出结果

printf("%d", d)输出d的值,最终打印结果为2。

内容的提问来源于stack exchange,提问作者Markus Royik-Turner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:06:03