C语言中主函数与计算函数不同变量名的参数值传递原理
C语言函数值传递的匹配逻辑
在C语言里,函数调用时的参数传递完全是按位置顺序匹配,和变量名称没有任何关系。
当你在主函数里调用
calculate(bill_amount, tax_percent, tip_percent)时,编译器只会关注参数的顺序:- 第一个实参
bill_amount的值,会被拷贝到calculate函数的第一个形参bill中; - 第二个实参
tax_percent的值,拷贝到第二个形参tax中; - 第三个实参
tip_percent的值,拷贝到第三个形参tip中。
- 第一个实参
形参(
calculate里的bill、tax、tip)本质是函数内部的局部变量,只是在函数调用时,会用对应位置实参的值来初始化它们。不管实参和形参的名字是否一致,只要位置对应、类型兼容,值就会被正确传递。
举个直观的代码例子:
#include <stdio.h> float calculate(float bill, float tax, float tip) { return bill * (1 + tax/100) * (1 + tip/100); } int main() { float bill_amount = 100.0f; float tax_percent = 8.0f; float tip_percent = 15.0f; float total = calculate(bill_amount, tax_percent, tip_percent); printf("Total: %.2f\n", total); return 0; }
这里main里的变量名和calculate的形参名完全不同,但调用时编译器只按位置一一对应赋值,所以bill_amount的100.0会传给bill,tax_percent的8.0传给tax,以此类推。
- 额外提醒:如果参数位置写错(比如把
tip_percent放到第二个位置),tax形参拿到的就会是小费比例的值,程序结果必然出错——这也侧面证明了传递是按位置实现的,和变量名无关。
内容的提问来源于stack exchange,提问作者StigOlov
相关产品推荐
相关产品推荐

