请解释下述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更新为14fun1执行第二行:b = a / 2→ 14/2=7,fun1.b更新为7fun1返回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更新为4fun1执行第二行:b = a /2→4/2=2,fun1.b更新为2fun1返回2,因此main.d赋值为2
第四步:输出结果
printf("%d", d)输出d的值,最终打印结果为2。
内容的提问来源于stack exchange,提问作者Markus Royik-Turner
相关产品推荐
相关产品推荐

